From 6383062c7e67dca01e8629a8b9e466c8e0504acb Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Fri, 8 Sep 2006 09:48:38 -0700 Subject: [PATCH] --- yaml --- r: 33814 b: refs/heads/master c: 016eb4a0ed06a3677d67a584da901f0e9a63c666 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/truncate.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index f1e8310e34b6..efb8be7337f2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3665d0e58fa44f50c744f85c7e8ad21d5b10e206 +refs/heads/master: 016eb4a0ed06a3677d67a584da901f0e9a63c666 diff --git a/trunk/mm/truncate.c b/trunk/mm/truncate.c index cf1b015df4a7..c6ab55ec6883 100644 --- a/trunk/mm/truncate.c +++ b/trunk/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; } /**