NFSD: Refactor find_file()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 28 Oct 2022 14:47:47 +0000 (10:47 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 28 Nov 2022 17:54:47 +0000 (12:54 -0500)
find_file() is now the only caller of find_file_locked(), so just
fold these two together.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: NeilBrown <neilb@suse.de>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
fs/nfsd/nfs4state.c

index d63ce21..a611e7b 100644 (file)
@@ -4682,31 +4682,24 @@ move_to_close_lru(struct nfs4_ol_stateid *s, struct net *net)
                nfs4_put_stid(&last->st_stid);
 }
 
-/* search file_hashtbl[] for file */
-static struct nfs4_file *
-find_file_locked(const struct svc_fh *fh, unsigned int hashval)
+static noinline_for_stack struct nfs4_file *
+nfsd4_file_hash_lookup(const struct svc_fh *fhp)
 {
-       struct nfs4_file *fp;
+       unsigned int hashval = file_hashval(fhp);
+       struct nfs4_file *fi;
 
-       hlist_for_each_entry_rcu(fp, &file_hashtbl[hashval], fi_hash,
-                               lockdep_is_held(&state_lock)) {
-               if (fh_match(&fp->fi_fhandle, &fh->fh_handle)) {
-                       if (refcount_inc_not_zero(&fp->fi_ref))
-                               return fp;
+       rcu_read_lock();
+       hlist_for_each_entry_rcu(fi, &file_hashtbl[hashval], fi_hash,
+                                lockdep_is_held(&state_lock)) {
+               if (fh_match(&fi->fi_fhandle, &fhp->fh_handle)) {
+                       if (refcount_inc_not_zero(&fi->fi_ref)) {
+                               rcu_read_unlock();
+                               return fi;
+                       }
                }
        }
-       return NULL;
-}
-
-static struct nfs4_file * find_file(struct svc_fh *fh)
-{
-       struct nfs4_file *fp;
-       unsigned int hashval = file_hashval(fh);
-
-       rcu_read_lock();
-       fp = find_file_locked(fh, hashval);
        rcu_read_unlock();
-       return fp;
+       return NULL;
 }
 
 /*
@@ -4757,9 +4750,10 @@ nfs4_share_conflict(struct svc_fh *current_fh, unsigned int deny_type)
        struct nfs4_file *fp;
        __be32 ret = nfs_ok;
 
-       fp = find_file(current_fh);
+       fp = nfsd4_file_hash_lookup(current_fh);
        if (!fp)
                return ret;
+
        /* Check for conflicting share reservations */
        spin_lock(&fp->fi_lock);
        if (fp->fi_share_deny & deny_type)