summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@digeo.com>2003-06-04 08:32:46 -0700
committerDavid Mosberger <davidm@tiger.hpl.hp.com>2003-06-04 08:32:46 -0700
commit82980ce280477b5315380299ac908d7035ff7dfb (patch)
tree46741f009f9755a8bc453d8ed2a721e16eafebfc
parent938da621beb483897f6e505bb3f483d84796f807 (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.c3
-rw-r--r--mm/filemap.c2
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;