diff options
| author | Andrew Morton <akpm@digeo.com> | 2003-06-04 08:32:46 -0700 |
|---|---|---|
| committer | David Mosberger <davidm@tiger.hpl.hp.com> | 2003-06-04 08:32:46 -0700 |
| commit | 82980ce280477b5315380299ac908d7035ff7dfb (patch) | |
| tree | 46741f009f9755a8bc453d8ed2a721e16eafebfc | |
| parent | 938da621beb483897f6e505bb3f483d84796f807 (diff) | |
[PATCH] remove unsafe BUG_ON()
From: Hugh Dickins <hugh@veritas.com>
PageDirty BUG_ON in __remove_inode_page is, and always has been, unsafe for
SMP or preemption: truncation may be racing against unmapping's
set_page_dirty in zap_pte_range (amongst a few other possibilities).
!PageUptodate error in __set_page_dirty_buffers is unsafe then too.
| -rw-r--r-- | fs/buffer.c | 3 | ||||
| -rw-r--r-- | mm/filemap.c | 2 |
2 files changed, 0 insertions, 5 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index abb476e7679e..c64523feade7 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -822,9 +822,6 @@ int __set_page_dirty_buffers(struct page *page) goto out; } - if (!PageUptodate(page)) - buffer_error(); - spin_lock(&mapping->private_lock); if (page_has_buffers(page)) { struct buffer_head *head = page_buffers(page); diff --git a/mm/filemap.c b/mm/filemap.c index 0db36521d5bb..c80f6e66e620 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -81,8 +81,6 @@ void __remove_from_page_cache(struct page *page) { struct address_space *mapping = page->mapping; - BUG_ON(PageDirty(page) && !PageSwapCache(page)); - radix_tree_delete(&mapping->page_tree, page->index); list_del(&page->list); page->mapping = NULL; |
