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@xxxxxx> Reported-by: Dave Jones <davej@xxxxxxxxxxxxxxxxx> 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); -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html