diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2011-11-23 12:03:18 -0500 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-03 22:52:35 -0500 | 
| commit | bad0dcffc21d17a07dbb83a2bf764f35a57feba5 (patch) | |
| tree | bb2ed8685bafc927df70307ba13df53469000255 | |
| parent | a561be7100cd610bd2e082f3211c1dfb45835817 (diff) | |
| download | olio-linux-3.10-bad0dcffc21d17a07dbb83a2bf764f35a57feba5.tar.xz olio-linux-3.10-bad0dcffc21d17a07dbb83a2bf764f35a57feba5.zip  | |
new helpers: fh_{want,drop}_write()
A bunch of places in nfsd does mnt_{want,drop}_write on vfsmount of
export of given fhandle.  Switched to obvious inlined helpers...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/nfsd/nfs4proc.c | 4 | ||||
| -rw-r--r-- | fs/nfsd/vfs.c | 34 | ||||
| -rw-r--r-- | fs/nfsd/vfs.h | 10 | 
3 files changed, 29 insertions, 19 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index fa383361bc6..c5e28ed8bca 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -838,7 +838,7 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,  			return status;  		}  	} -	status = mnt_want_write(cstate->current_fh.fh_export->ex_path.mnt); +	status = fh_want_write(&cstate->current_fh);  	if (status)  		return status;  	status = nfs_ok; @@ -856,7 +856,7 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,  	status = nfsd_setattr(rqstp, &cstate->current_fh, &setattr->sa_iattr,  				0, (time_t)0);  out: -	mnt_drop_write(cstate->current_fh.fh_export->ex_path.mnt); +	fh_drop_write(&cstate->current_fh);  	return status;  } diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 7a2e442623c..29b1202313e 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1300,7 +1300,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  		goto out;  	} -	host_err = mnt_want_write(fhp->fh_export->ex_path.mnt); +	host_err = fh_want_write(fhp);  	if (host_err)  		goto out_nfserr; @@ -1325,7 +1325,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  		break;  	}  	if (host_err < 0) { -		mnt_drop_write(fhp->fh_export->ex_path.mnt); +		fh_drop_write(fhp);  		goto out_nfserr;  	} @@ -1339,7 +1339,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  	err2 = nfserrno(commit_metadata(fhp));  	if (err2)  		err = err2; -	mnt_drop_write(fhp->fh_export->ex_path.mnt); +	fh_drop_write(fhp);  	/*  	 * Update the file handle to get the new inode info.  	 */ @@ -1430,7 +1430,7 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  		v_atime = verifier[1]&0x7fffffff;  	} -	host_err = mnt_want_write(fhp->fh_export->ex_path.mnt); +	host_err = fh_want_write(fhp);  	if (host_err)  		goto out_nfserr;  	if (dchild->d_inode) { @@ -1469,13 +1469,13 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  		case NFS3_CREATE_GUARDED:  			err = nfserr_exist;  		} -		mnt_drop_write(fhp->fh_export->ex_path.mnt); +		fh_drop_write(fhp);  		goto out;  	}  	host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL);  	if (host_err < 0) { -		mnt_drop_write(fhp->fh_export->ex_path.mnt); +		fh_drop_write(fhp);  		goto out_nfserr;  	}  	if (created) @@ -1503,7 +1503,7 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  	if (!err)  		err = nfserrno(commit_metadata(fhp)); -	mnt_drop_write(fhp->fh_export->ex_path.mnt); +	fh_drop_write(fhp);  	/*  	 * Update the filehandle to get the new inode info.  	 */ @@ -1600,7 +1600,7 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp,  	if (IS_ERR(dnew))  		goto out_nfserr; -	host_err = mnt_want_write(fhp->fh_export->ex_path.mnt); +	host_err = fh_want_write(fhp);  	if (host_err)  		goto out_nfserr; @@ -1621,7 +1621,7 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp,  		err = nfserrno(commit_metadata(fhp));  	fh_unlock(fhp); -	mnt_drop_write(fhp->fh_export->ex_path.mnt); +	fh_drop_write(fhp);  	cerr = fh_compose(resfhp, fhp->fh_export, dnew, fhp);  	dput(dnew); @@ -1674,7 +1674,7 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,  	dold = tfhp->fh_dentry; -	host_err = mnt_want_write(tfhp->fh_export->ex_path.mnt); +	host_err = fh_want_write(tfhp);  	if (host_err) {  		err = nfserrno(host_err);  		goto out_dput; @@ -1699,7 +1699,7 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,  			err = nfserrno(host_err);  	}  out_drop_write: -	mnt_drop_write(tfhp->fh_export->ex_path.mnt); +	fh_drop_write(tfhp);  out_dput:  	dput(dnew);  out_unlock: @@ -1776,7 +1776,7 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,  	host_err = -EXDEV;  	if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt)  		goto out_dput_new; -	host_err = mnt_want_write(ffhp->fh_export->ex_path.mnt); +	host_err = fh_want_write(ffhp);  	if (host_err)  		goto out_dput_new; @@ -1795,7 +1795,7 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,  			host_err = commit_metadata(ffhp);  	}  out_drop_write: -	mnt_drop_write(ffhp->fh_export->ex_path.mnt); +	fh_drop_write(ffhp);   out_dput_new:  	dput(ndentry);   out_dput_old: @@ -1854,7 +1854,7 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,  	if (!type)  		type = rdentry->d_inode->i_mode & S_IFMT; -	host_err = mnt_want_write(fhp->fh_export->ex_path.mnt); +	host_err = fh_want_write(fhp);  	if (host_err)  		goto out_put; @@ -1868,7 +1868,7 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,  	if (!host_err)  		host_err = commit_metadata(fhp);  out_drop_write: -	mnt_drop_write(fhp->fh_export->ex_path.mnt); +	fh_drop_write(fhp);  out_put:  	dput(rdentry); @@ -2270,7 +2270,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl)  	} else  		size = 0; -	error = mnt_want_write(fhp->fh_export->ex_path.mnt); +	error = fh_want_write(fhp);  	if (error)  		goto getout;  	if (size) @@ -2284,7 +2284,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl)  				error = 0;  		}  	} -	mnt_drop_write(fhp->fh_export->ex_path.mnt); +	fh_drop_write(fhp);  getout:  	kfree(value); diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h index 3f54ad03bb2..cee6a12296e 100644 --- a/fs/nfsd/vfs.h +++ b/fs/nfsd/vfs.h @@ -106,4 +106,14 @@ struct posix_acl *nfsd_get_posix_acl(struct svc_fh *, int);  int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);  #endif +static inline int fh_want_write(struct svc_fh *fh) +{ +	return mnt_want_write(fh->fh_export->ex_path.mnt); +} + +static inline void fh_drop_write(struct svc_fh *fh) +{ +	mnt_drop_write(fh->fh_export->ex_path.mnt); +} +  #endif /* LINUX_NFSD_VFS_H */  |