mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
NFSD: Avoid using rqstp->rq_vers in nfsd_set_fh_dentry()
Currently, fh_verify() makes some daring assumptions about which version of file handle the caller wants, based on the things it can find in the passed-in rqstp. The about-to-be-introduced LOCALIO use case sometimes has no svc_rqst context, so this logic won't work in that case. Instead, examine the passed-in file handle. It's .max_size field should carry information to allow nfsd_set_fh_dentry() to initialize the file handle appropriately. The file handle used by lockd and the one created by write_filehandle never need any of the version-specific fields (which affect things like write and getattr requests and pre/post attributes). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Reviewed-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: NeilBrown <neilb@suse.de> Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
parent
b0d87dbd8b
commit
7c0b07b49b
@ -267,20 +267,20 @@ static __be32 nfsd_set_fh_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp)
|
||||
fhp->fh_dentry = dentry;
|
||||
fhp->fh_export = exp;
|
||||
|
||||
switch (rqstp->rq_vers) {
|
||||
case 4:
|
||||
switch (fhp->fh_maxsize) {
|
||||
case NFS4_FHSIZE:
|
||||
if (dentry->d_sb->s_export_op->flags & EXPORT_OP_NOATOMIC_ATTR)
|
||||
fhp->fh_no_atomic_attr = true;
|
||||
fhp->fh_64bit_cookies = true;
|
||||
break;
|
||||
case 3:
|
||||
case NFS3_FHSIZE:
|
||||
if (dentry->d_sb->s_export_op->flags & EXPORT_OP_NOWCC)
|
||||
fhp->fh_no_wcc = true;
|
||||
fhp->fh_64bit_cookies = true;
|
||||
if (exp->ex_flags & NFSEXP_V4ROOT)
|
||||
goto out;
|
||||
break;
|
||||
case 2:
|
||||
case NFS_FHSIZE:
|
||||
fhp->fh_no_wcc = true;
|
||||
if (EX_WGATHER(exp))
|
||||
fhp->fh_use_wgather = true;
|
||||
|
Loading…
Reference in New Issue
Block a user