diff options
author | Paul Mackerras <paulus@samba.org> | 2006-09-14 07:07:18 +1000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-09-14 07:07:18 +1000 |
commit | c547fc28ab3e8716076fdaf4bd0260c5d63a18f7 (patch) | |
tree | 34af1fa64a63618660187ae58ad182665a1861ef /mm/truncate.c | |
parent | 3dd836a56de0d4f049438412959b905e1db4666e (diff) | |
parent | 63b98080daa35f0d682db04f4fb7ada010888752 (diff) | |
download | kernel_samsung_smdk4412-c547fc28ab3e8716076fdaf4bd0260c5d63a18f7.zip kernel_samsung_smdk4412-c547fc28ab3e8716076fdaf4bd0260c5d63a18f7.tar.gz kernel_samsung_smdk4412-c547fc28ab3e8716076fdaf4bd0260c5d63a18f7.tar.bz2 |
Merge branch 'linux-2.6'
Diffstat (limited to 'mm/truncate.c')
-rw-r--r-- | mm/truncate.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/mm/truncate.c b/mm/truncate.c index cf1b015..c6ab55e 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -68,10 +68,10 @@ invalidate_complete_page(struct address_space *mapping, struct page *page) return 0; write_lock_irq(&mapping->tree_lock); - if (PageDirty(page)) { - write_unlock_irq(&mapping->tree_lock); - return 0; - } + if (PageDirty(page)) + goto failed; + if (page_count(page) != 2) /* caller's ref + pagecache ref */ + goto failed; BUG_ON(PagePrivate(page)); __remove_from_page_cache(page); @@ -79,6 +79,9 @@ invalidate_complete_page(struct address_space *mapping, struct page *page) ClearPageUptodate(page); page_cache_release(page); /* pagecache ref */ return 1; +failed: + write_unlock_irq(&mapping->tree_lock); + return 0; } /** |