The spinlock() within the condition in while() will cause a compile error if it is not a function. This is not a problem on mainline but it does not look pretty and there is no reason to do it that way. That patch writes it a little differently and avoids the double condition. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> --- * David Howells | 2013-04-02 10:05:56 [+0100]: >You've done it less prettily. I would recommend: put the spin_lock() before >the loop and duplicate it just inside the loop's closing brace. The optimiser >will merge them. This means the loop condition is still in the loop >statement. > >Also, I would recommend against using "do ... while(1)". Better to use >"for(;;) ..." or "while(1) ..." so that the fact that it's an "infinite loop" >is up front. > >Further, you've got an extra space between "do" and "{". Is this better now? >David fs/fscache/page.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-) diff --git a/fs/fscache/page.c b/fs/fscache/page.c index ff000e5..389e5c9 100644 --- a/fs/fscache/page.c +++ b/fs/fscache/page.c @@ -796,11 +796,13 @@ 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) { + spin_lock(&cookie->stores_lock); + while (1) { + n = radix_tree_gang_lookup_tag(&cookie->stores, results, 0, + ARRAY_SIZE(results), + FSCACHE_COOKIE_PENDING_TAG); + if (n == 0) + break; for (i = n - 1; i >= 0; i--) { page = results[i]; radix_tree_delete(&cookie->stores, page->index); @@ -810,6 +812,7 @@ void fscache_invalidate_writes(struct fscache_cookie *cookie) for (i = n - 1; i >= 0; i--) page_cache_release(results[i]); + spin_lock(&cookie->stores_lock); } spin_unlock(&cookie->stores_lock); -- 1.7.6.5 -- Linux-cachefs mailing list Linux-cachefs@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/linux-cachefs