From f26b6d517be00ed692b104f52f2eb6196332bb5b Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Thu, 15 Sep 2011 08:45:19 +0800 Subject: [PATCH] --- yaml --- r: 263835 b: refs/heads/master c: cc39c6a9bbdebfcf1a7dee64d83bf302bc38d941 h: refs/heads/master i: 263833: e5a9080784da8bb11c7dbcb87c2cf8986fbe5b3e 263831: cb9693ea67c562e3acc18b24b4d1a044e4ab0aca v: v3 --- [refs] | 2 +- trunk/mm/filemap.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 5ebab0a582ca..b231c6d5756b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4f5b04800a224aadb6cffcbbc3d3fa26e2367c7f +refs/heads/master: cc39c6a9bbdebfcf1a7dee64d83bf302bc38d941 diff --git a/trunk/mm/filemap.c b/trunk/mm/filemap.c index 645a080ba4df..7771871fa353 100644 --- a/trunk/mm/filemap.c +++ b/trunk/mm/filemap.c @@ -827,13 +827,14 @@ unsigned find_get_pages(struct address_space *mapping, pgoff_t start, { unsigned int i; unsigned int ret; - unsigned int nr_found; + unsigned int nr_found, nr_skip; rcu_read_lock(); restart: nr_found = radix_tree_gang_lookup_slot(&mapping->page_tree, (void ***)pages, NULL, start, nr_pages); ret = 0; + nr_skip = 0; for (i = 0; i < nr_found; i++) { struct page *page; repeat: @@ -856,6 +857,7 @@ unsigned find_get_pages(struct address_space *mapping, pgoff_t start, * here as an exceptional entry: so skip over it - * we only reach this from invalidate_mapping_pages(). */ + nr_skip++; continue; } @@ -876,7 +878,7 @@ unsigned find_get_pages(struct address_space *mapping, pgoff_t start, * If all entries were removed before we could secure them, * try again, because callers stop trying once 0 is returned. */ - if (unlikely(!ret && nr_found)) + if (unlikely(!ret && nr_found > nr_skip)) goto restart; rcu_read_unlock(); return ret;