NFSD: use (un)lock_inode instead of fh_(un)lock for file operations
[sfrench/cifs-2.6.git] / fs / nfsd / vfs.c
index 19b47ca2f2385392f36948bb65f544143fe39b45..8d5aa2faabf734b4cb93c811dd3c227b8d2c9a1c 100644 (file)
@@ -416,7 +416,7 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp,
                        return err;
        }
 
-       fh_lock(fhp);
+       inode_lock(inode);
        if (size_change) {
                /*
                 * RFC5661, Section 18.30.4:
@@ -464,7 +464,7 @@ out_unlock:
                attr->na_aclerr = set_posix_acl(&init_user_ns,
                                                inode, ACL_TYPE_DEFAULT,
                                                attr->na_dpacl);
-       fh_unlock(fhp);
+       inode_unlock(inode);
        if (size_change)
                put_write_access(inode);
 out:
@@ -2155,13 +2155,16 @@ out:
        return err;
 }
 
-/*
- * Removexattr and setxattr need to call fh_lock to both lock the inode
- * and set the change attribute. Since the top-level vfs_removexattr
- * and vfs_setxattr calls already do their own inode_lock calls, call
- * the _locked variant. Pass in a NULL pointer for delegated_inode,
- * and let the client deal with NFS4ERR_DELAY (same as with e.g.
- * setattr and remove).
+/**
+ * nfsd_removexattr - Remove an extended attribute
+ * @rqstp: RPC transaction being executed
+ * @fhp: NFS filehandle of object with xattr to remove
+ * @name: name of xattr to remove (NUL-terminate)
+ *
+ * Pass in a NULL pointer for delegated_inode, and let the client deal
+ * with NFS4ERR_DELAY (same as with e.g. setattr and remove).
+ *
+ * Returns nfs_ok on success, or an nfsstat in network byte order.
  */
 __be32
 nfsd_removexattr(struct svc_rqst *rqstp, struct svc_fh *fhp, char *name)
@@ -2177,12 +2180,14 @@ nfsd_removexattr(struct svc_rqst *rqstp, struct svc_fh *fhp, char *name)
        if (ret)
                return nfserrno(ret);
 
-       fh_lock(fhp);
+       inode_lock(fhp->fh_dentry->d_inode);
+       fh_fill_pre_attrs(fhp);
 
        ret = __vfs_removexattr_locked(&init_user_ns, fhp->fh_dentry,
                                       name, NULL);
 
-       fh_unlock(fhp);
+       fh_fill_post_attrs(fhp);
+       inode_unlock(fhp->fh_dentry->d_inode);
        fh_drop_write(fhp);
 
        return nfsd_xattr_errno(ret);
@@ -2202,12 +2207,13 @@ nfsd_setxattr(struct svc_rqst *rqstp, struct svc_fh *fhp, char *name,
        ret = fh_want_write(fhp);
        if (ret)
                return nfserrno(ret);
-       fh_lock(fhp);
+       inode_lock(fhp->fh_dentry->d_inode);
+       fh_fill_pre_attrs(fhp);
 
        ret = __vfs_setxattr_locked(&init_user_ns, fhp->fh_dentry, name, buf,
                                    len, flags, NULL);
-
-       fh_unlock(fhp);
+       fh_fill_post_attrs(fhp);
+       inode_unlock(fhp->fh_dentry->d_inode);
        fh_drop_write(fhp);
 
        return nfsd_xattr_errno(ret);