mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-30 19:15:14 +00:00
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>
This commit is contained in:
parent
a561be7100
commit
bad0dcffc2
3 changed files with 29 additions and 19 deletions
|
@ -838,7 +838,7 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
status = mnt_want_write(cstate->current_fh.fh_export->ex_path.mnt);
|
status = fh_want_write(&cstate->current_fh);
|
||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
status = nfs_ok;
|
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,
|
status = nfsd_setattr(rqstp, &cstate->current_fh, &setattr->sa_iattr,
|
||||||
0, (time_t)0);
|
0, (time_t)0);
|
||||||
out:
|
out:
|
||||||
mnt_drop_write(cstate->current_fh.fh_export->ex_path.mnt);
|
fh_drop_write(&cstate->current_fh);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1300,7 +1300,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
host_err = mnt_want_write(fhp->fh_export->ex_path.mnt);
|
host_err = fh_want_write(fhp);
|
||||||
if (host_err)
|
if (host_err)
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
|
|
||||||
|
@ -1325,7 +1325,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (host_err < 0) {
|
if (host_err < 0) {
|
||||||
mnt_drop_write(fhp->fh_export->ex_path.mnt);
|
fh_drop_write(fhp);
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1339,7 +1339,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||||
err2 = nfserrno(commit_metadata(fhp));
|
err2 = nfserrno(commit_metadata(fhp));
|
||||||
if (err2)
|
if (err2)
|
||||||
err = 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.
|
* 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;
|
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)
|
if (host_err)
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
if (dchild->d_inode) {
|
if (dchild->d_inode) {
|
||||||
|
@ -1469,13 +1469,13 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||||
case NFS3_CREATE_GUARDED:
|
case NFS3_CREATE_GUARDED:
|
||||||
err = nfserr_exist;
|
err = nfserr_exist;
|
||||||
}
|
}
|
||||||
mnt_drop_write(fhp->fh_export->ex_path.mnt);
|
fh_drop_write(fhp);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL);
|
host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL);
|
||||||
if (host_err < 0) {
|
if (host_err < 0) {
|
||||||
mnt_drop_write(fhp->fh_export->ex_path.mnt);
|
fh_drop_write(fhp);
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
}
|
}
|
||||||
if (created)
|
if (created)
|
||||||
|
@ -1503,7 +1503,7 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||||
if (!err)
|
if (!err)
|
||||||
err = nfserrno(commit_metadata(fhp));
|
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.
|
* 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))
|
if (IS_ERR(dnew))
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
|
|
||||||
host_err = mnt_want_write(fhp->fh_export->ex_path.mnt);
|
host_err = fh_want_write(fhp);
|
||||||
if (host_err)
|
if (host_err)
|
||||||
goto out_nfserr;
|
goto out_nfserr;
|
||||||
|
|
||||||
|
@ -1621,7 +1621,7 @@ nfsd_symlink(struct svc_rqst *rqstp, struct svc_fh *fhp,
|
||||||
err = nfserrno(commit_metadata(fhp));
|
err = nfserrno(commit_metadata(fhp));
|
||||||
fh_unlock(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);
|
cerr = fh_compose(resfhp, fhp->fh_export, dnew, fhp);
|
||||||
dput(dnew);
|
dput(dnew);
|
||||||
|
@ -1674,7 +1674,7 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,
|
||||||
|
|
||||||
dold = tfhp->fh_dentry;
|
dold = tfhp->fh_dentry;
|
||||||
|
|
||||||
host_err = mnt_want_write(tfhp->fh_export->ex_path.mnt);
|
host_err = fh_want_write(tfhp);
|
||||||
if (host_err) {
|
if (host_err) {
|
||||||
err = nfserrno(host_err);
|
err = nfserrno(host_err);
|
||||||
goto out_dput;
|
goto out_dput;
|
||||||
|
@ -1699,7 +1699,7 @@ nfsd_link(struct svc_rqst *rqstp, struct svc_fh *ffhp,
|
||||||
err = nfserrno(host_err);
|
err = nfserrno(host_err);
|
||||||
}
|
}
|
||||||
out_drop_write:
|
out_drop_write:
|
||||||
mnt_drop_write(tfhp->fh_export->ex_path.mnt);
|
fh_drop_write(tfhp);
|
||||||
out_dput:
|
out_dput:
|
||||||
dput(dnew);
|
dput(dnew);
|
||||||
out_unlock:
|
out_unlock:
|
||||||
|
@ -1776,7 +1776,7 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen,
|
||||||
host_err = -EXDEV;
|
host_err = -EXDEV;
|
||||||
if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt)
|
if (ffhp->fh_export->ex_path.mnt != tfhp->fh_export->ex_path.mnt)
|
||||||
goto out_dput_new;
|
goto out_dput_new;
|
||||||
host_err = mnt_want_write(ffhp->fh_export->ex_path.mnt);
|
host_err = fh_want_write(ffhp);
|
||||||
if (host_err)
|
if (host_err)
|
||||||
goto out_dput_new;
|
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);
|
host_err = commit_metadata(ffhp);
|
||||||
}
|
}
|
||||||
out_drop_write:
|
out_drop_write:
|
||||||
mnt_drop_write(ffhp->fh_export->ex_path.mnt);
|
fh_drop_write(ffhp);
|
||||||
out_dput_new:
|
out_dput_new:
|
||||||
dput(ndentry);
|
dput(ndentry);
|
||||||
out_dput_old:
|
out_dput_old:
|
||||||
|
@ -1854,7 +1854,7 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
|
||||||
if (!type)
|
if (!type)
|
||||||
type = rdentry->d_inode->i_mode & S_IFMT;
|
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)
|
if (host_err)
|
||||||
goto out_put;
|
goto out_put;
|
||||||
|
|
||||||
|
@ -1868,7 +1868,7 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
|
||||||
if (!host_err)
|
if (!host_err)
|
||||||
host_err = commit_metadata(fhp);
|
host_err = commit_metadata(fhp);
|
||||||
out_drop_write:
|
out_drop_write:
|
||||||
mnt_drop_write(fhp->fh_export->ex_path.mnt);
|
fh_drop_write(fhp);
|
||||||
out_put:
|
out_put:
|
||||||
dput(rdentry);
|
dput(rdentry);
|
||||||
|
|
||||||
|
@ -2270,7 +2270,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl)
|
||||||
} else
|
} else
|
||||||
size = 0;
|
size = 0;
|
||||||
|
|
||||||
error = mnt_want_write(fhp->fh_export->ex_path.mnt);
|
error = fh_want_write(fhp);
|
||||||
if (error)
|
if (error)
|
||||||
goto getout;
|
goto getout;
|
||||||
if (size)
|
if (size)
|
||||||
|
@ -2284,7 +2284,7 @@ nfsd_set_posix_acl(struct svc_fh *fhp, int type, struct posix_acl *acl)
|
||||||
error = 0;
|
error = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mnt_drop_write(fhp->fh_export->ex_path.mnt);
|
fh_drop_write(fhp);
|
||||||
|
|
||||||
getout:
|
getout:
|
||||||
kfree(value);
|
kfree(value);
|
||||||
|
|
|
@ -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 *);
|
int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
|
||||||
#endif
|
#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 */
|
#endif /* LINUX_NFSD_VFS_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue