diff options
author | Yue Hu <zbestahu@gmail.com> | 2022-05-25 05:51:50 +0300 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2022-07-05 18:12:20 +0300 |
commit | 5c4588aea6675b69e328d468c5b6be5127e19a79 (patch) | |
tree | 5e9d06664135463136c6d3950d10287d3b78378d /fs/fscache/cookie.c | |
parent | bf17455b9cbd4b10bf30d39c047307e1d774fb1a (diff) | |
download | linux-5c4588aea6675b69e328d468c5b6be5127e19a79.tar.xz |
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: Yue Hu <huyue2@coolpad.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://listman.redhat.com/archives/linux-cachefs/2022-May/006919.html
Diffstat (limited to 'fs/fscache/cookie.c')
-rw-r--r-- | fs/fscache/cookie.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c index 9d3cf0111709..575a5ba07c0d 100644 --- a/fs/fscache/cookie.c +++ b/fs/fscache/cookie.c @@ -372,17 +372,22 @@ nomem: 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, struct fscache_cookie *wait_for) { 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); - if (READ_ONCE(*statep) != FSCACHE_COOKIE_STATE_DROPPED) { + if (!fscache_cookie_is_dropped(wait_for)) { pr_notice("Potential collision c=%08x old: c=%08x", 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)); } } |