Commit 5c4588ae authored by Yue Hu's avatar Yue Hu Committed by David Howells

fscache: Introduce fscache_cookie_is_dropped()

FSCACHE_COOKIE_STATE_DROPPED will be read more than once, so let's add a
helper to avoid code duplication.
Signed-off-by: default avatarYue Hu <huyue2@coolpad.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Link: https://listman.redhat.com/archives/linux-cachefs/2022-May/006919.html
parent bf17455b
...@@ -372,17 +372,22 @@ static struct fscache_cookie *fscache_alloc_cookie( ...@@ -372,17 +372,22 @@ static struct fscache_cookie *fscache_alloc_cookie(
return NULL; return NULL;
} }
static inline bool fscache_cookie_is_dropped(struct fscache_cookie *cookie)
{
return READ_ONCE(cookie->state) == FSCACHE_COOKIE_STATE_DROPPED;
}
static void fscache_wait_on_collision(struct fscache_cookie *candidate, static void fscache_wait_on_collision(struct fscache_cookie *candidate,
struct fscache_cookie *wait_for) struct fscache_cookie *wait_for)
{ {
enum fscache_cookie_state *statep = &wait_for->state; enum fscache_cookie_state *statep = &wait_for->state;
wait_var_event_timeout(statep, READ_ONCE(*statep) == FSCACHE_COOKIE_STATE_DROPPED, wait_var_event_timeout(statep, fscache_cookie_is_dropped(wait_for),
20 * HZ); 20 * HZ);
if (READ_ONCE(*statep) != FSCACHE_COOKIE_STATE_DROPPED) { if (!fscache_cookie_is_dropped(wait_for)) {
pr_notice("Potential collision c=%08x old: c=%08x", pr_notice("Potential collision c=%08x old: c=%08x",
candidate->debug_id, wait_for->debug_id); candidate->debug_id, wait_for->debug_id);
wait_var_event(statep, READ_ONCE(*statep) == FSCACHE_COOKIE_STATE_DROPPED); wait_var_event(statep, fscache_cookie_is_dropped(wait_for));
} }
} }
......
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