Commit 80a00ab8 authored by David Howells's avatar David Howells

fscache: Fix the volume collision wait condition

The condition that the waits in fscache_wait_on_volume_collision() are
waiting until are inverted.  This suddenly started happening on the
upstream kernel with something like the following appearing in dmesg when
running xfstests:

	CacheFiles: cachefiles: Inode already in use: Iafs,example.com,100055

Fix them by inverting the conditions.

Fixes: 62ab6335 ("fscache: Implement volume registration")
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
cc: linux-cachefs@redhat.com
Link: https://lore.kernel.org/r/164251398010.3435901.943876048104930939.stgit@warthog.procyon.org.uk/ # v1
parent 455e73a0
...@@ -142,12 +142,12 @@ static void fscache_wait_on_volume_collision(struct fscache_volume *candidate, ...@@ -142,12 +142,12 @@ static void fscache_wait_on_volume_collision(struct fscache_volume *candidate,
unsigned int collidee_debug_id) unsigned int collidee_debug_id)
{ {
wait_var_event_timeout(&candidate->flags, wait_var_event_timeout(&candidate->flags,
fscache_is_acquire_pending(candidate), 20 * HZ); !fscache_is_acquire_pending(candidate), 20 * HZ);
if (!fscache_is_acquire_pending(candidate)) { if (!fscache_is_acquire_pending(candidate)) {
pr_notice("Potential volume collision new=%08x old=%08x", pr_notice("Potential volume collision new=%08x old=%08x",
candidate->debug_id, collidee_debug_id); candidate->debug_id, collidee_debug_id);
fscache_stat(&fscache_n_volumes_collision); fscache_stat(&fscache_n_volumes_collision);
wait_var_event(&candidate->flags, fscache_is_acquire_pending(candidate)); wait_var_event(&candidate->flags, !fscache_is_acquire_pending(candidate));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment