Re: [PATCH] nfsd: don't get write access twіce in nfsd_setattr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 07, 2017 at 10:12:44AM +0100, Christoph Hellwig wrote:
> 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>

Thanks, I'll see if I can squeeze this into 4.10.--b.

> 
> 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



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux