}
 
 /* OPEN Share state helper functions */
-static void nfsd4_init_file(struct svc_fh *fh, unsigned int hashval,
-                               struct nfs4_file *fp)
-{
-       lockdep_assert_held(&state_lock);
 
+static void nfsd4_file_init(const struct svc_fh *fh, struct nfs4_file *fp)
+{
        refcount_set(&fp->fi_ref, 1);
        spin_lock_init(&fp->fi_lock);
        INIT_LIST_HEAD(&fp->fi_stateids);
        INIT_LIST_HEAD(&fp->fi_lo_states);
        atomic_set(&fp->fi_lo_recalls, 0);
 #endif
-       hlist_add_head_rcu(&fp->fi_hash, &file_hashtbl[hashval]);
 }
 
 void
                        fp->fi_aliased = alias_found = true;
        }
        if (likely(ret == NULL)) {
-               nfsd4_init_file(fh, hashval, new);
+               nfsd4_file_init(fh, new);
+               hlist_add_head_rcu(&new->fi_hash, &file_hashtbl[hashval]);
                new->fi_aliased = alias_found;
                ret = new;
        }