From f0075b774395de9bfe3370c9875541e10c2ada5c Mon Sep 17 00:00:00 2001 From: Sebastian Andrzej Siewior Date: Fri, 10 May 2013 19:50:24 +0100 Subject: [PATCH] --- yaml --- r: 377724 b: refs/heads/master c: ee8be57bc331f00d520c4c8a78ffa9590ed41c2c h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/fscache/page.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index e7fe987ca69f..36d545a3b041 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cb65537ee1134d3cc55c1fa83952bc8eb1212833 +refs/heads/master: ee8be57bc331f00d520c4c8a78ffa9590ed41c2c diff --git a/trunk/fs/fscache/page.c b/trunk/fs/fscache/page.c index ff000e52072d..4882c806253f 100644 --- a/trunk/fs/fscache/page.c +++ b/trunk/fs/fscache/page.c @@ -796,11 +796,16 @@ void fscache_invalidate_writes(struct fscache_cookie *cookie) _enter(""); - while (spin_lock(&cookie->stores_lock), - n = radix_tree_gang_lookup_tag(&cookie->stores, results, 0, - ARRAY_SIZE(results), - FSCACHE_COOKIE_PENDING_TAG), - n > 0) { + for (;;) { + spin_lock(&cookie->stores_lock); + n = radix_tree_gang_lookup_tag(&cookie->stores, results, 0, + ARRAY_SIZE(results), + FSCACHE_COOKIE_PENDING_TAG); + if (n == 0) { + spin_unlock(&cookie->stores_lock); + break; + } + for (i = n - 1; i >= 0; i--) { page = results[i]; radix_tree_delete(&cookie->stores, page->index); @@ -812,7 +817,6 @@ void fscache_invalidate_writes(struct fscache_cookie *cookie) page_cache_release(results[i]); } - spin_unlock(&cookie->stores_lock); _leave(""); }