linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] nfsd: don't get write access twіce in nfsd_setattr
@ 2017-02-07  9:12 Christoph Hellwig
  2017-02-08 21:45 ` J. Bruce Fields
  0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2017-02-07  9:12 UTC (permalink / raw)
  To: J. Bruce Fields; +Cc: linux-nfs

Turns out doing mnt_want_write twice for the same process makes
lockdep unhappy, so move the fh_want_write down to after calling
vfs_truncate in nfsd_setattr.  No changes to error handling required
as the want write state is automatically cleaned up by the caller
based on a flag in the svc_fh.

Fixes: 41f53350 ("nfsd: special case truncates some more")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reported-by: Dave Jones <davej@codemonkey.org.uk>

diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
index ca13236dbb1f..a974368026a1 100644
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@ -359,11 +359,6 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
 	err = fh_verify(rqstp, fhp, ftype, accmode);
 	if (err)
 		return err;
-	if (get_write_count) {
-		host_err = fh_want_write(fhp);
-		if (host_err)
-			goto out_host_err;
-	}
 
 	dentry = fhp->fh_dentry;
 	inode = d_inode(dentry);
@@ -416,6 +411,12 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
 
 	iap->ia_valid |= ATTR_CTIME;
 
+	if (get_write_count) {
+		host_err = fh_want_write(fhp);
+		if (host_err)
+			goto out_host_err;
+	}
+
 	fh_lock(fhp);
 	host_err = notify_change(dentry, iap, NULL);
 	fh_unlock(fhp);

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-02-09 15:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-07  9:12 [PATCH] nfsd: don't get write access twіce in nfsd_setattr Christoph Hellwig
2017-02-08 21:45 ` J. Bruce Fields
2017-02-08 21:50   ` Christoph Hellwig
2017-02-08 21:51     ` J. Bruce Fields
2017-02-09 13:25       ` Christoph Hellwig
2017-02-09 15:43         ` J. Bruce Fields
2017-02-09 15:46           ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).