]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
SUNRPC: introduce cache_check_rcu to help check in rcu context
authorYang Erkun <yangerkun@huawei.com>
Wed, 25 Dec 2024 06:59:05 +0000 (14:59 +0800)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 6 Jan 2025 14:37:40 +0000 (09:37 -0500)
This is a prepare patch to add cache_check_rcu, will use it with follow
patch.

Suggested-by: NeilBrown <neilb@suse.de>
Signed-off-by: Yang Erkun <yangerkun@huawei.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
include/linux/sunrpc/cache.h
net/sunrpc/cache.c

index 35766963dd145d9cb502a2d93ce81b5a0e9a7f2a..e783132e481ff2593fdc5d323f7b3a08f85d4cd8 100644 (file)
@@ -222,6 +222,8 @@ static inline bool cache_is_expired(struct cache_detail *detail, struct cache_he
        return detail->flush_time >= h->last_refresh;
 }
 
+extern int cache_check_rcu(struct cache_detail *detail,
+                      struct cache_head *h, struct cache_req *rqstp);
 extern int cache_check(struct cache_detail *detail,
                       struct cache_head *h, struct cache_req *rqstp);
 extern void cache_flush(void);
index 059f6ef1ad1898de24f8eb5614b7545c2fa4dcf1..88f42a27c8cc92db41c1a1f9e252b7eeb5ca520c 100644 (file)
@@ -281,21 +281,7 @@ static int try_to_negate_entry(struct cache_detail *detail, struct cache_head *h
        return rv;
 }
 
-/*
- * This is the generic cache management routine for all
- * the authentication caches.
- * It checks the currency of a cache item and will (later)
- * initiate an upcall to fill it if needed.
- *
- *
- * Returns 0 if the cache_head can be used, or cache_puts it and returns
- * -EAGAIN if upcall is pending and request has been queued
- * -ETIMEDOUT if upcall failed or request could not be queue or
- *           upcall completed but item is still invalid (implying that
- *           the cache item has been replaced with a newer one).
- * -ENOENT if cache entry was negative
- */
-int cache_check(struct cache_detail *detail,
+int cache_check_rcu(struct cache_detail *detail,
                    struct cache_head *h, struct cache_req *rqstp)
 {
        int rv;
@@ -336,6 +322,31 @@ int cache_check(struct cache_detail *detail,
                                rv = -ETIMEDOUT;
                }
        }
+
+       return rv;
+}
+EXPORT_SYMBOL_GPL(cache_check_rcu);
+
+/*
+ * This is the generic cache management routine for all
+ * the authentication caches.
+ * It checks the currency of a cache item and will (later)
+ * initiate an upcall to fill it if needed.
+ *
+ *
+ * Returns 0 if the cache_head can be used, or cache_puts it and returns
+ * -EAGAIN if upcall is pending and request has been queued
+ * -ETIMEDOUT if upcall failed or request could not be queue or
+ *           upcall completed but item is still invalid (implying that
+ *           the cache item has been replaced with a newer one).
+ * -ENOENT if cache entry was negative
+ */
+int cache_check(struct cache_detail *detail,
+               struct cache_head *h, struct cache_req *rqstp)
+{
+       int rv;
+
+       rv = cache_check_rcu(detail, h, rqstp);
        if (rv)
                cache_put(h, detail);
        return rv;