diff options
Diffstat (limited to 'fs/nfsd/vfs.c')
| -rw-r--r-- | fs/nfsd/vfs.c | 14 | 
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index c8bd9c3be7f..4700a0a929d 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -745,7 +745,7 @@ __be32  nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type,  			int may_flags, struct file **filp)  { -	struct dentry	*dentry; +	struct path	path;  	struct inode	*inode;  	int		flags = O_RDONLY|O_LARGEFILE;  	__be32		err; @@ -762,8 +762,9 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type,  	if (err)  		goto out; -	dentry = fhp->fh_dentry; -	inode = dentry->d_inode; +	path.mnt = fhp->fh_export->ex_path.mnt; +	path.dentry = fhp->fh_dentry; +	inode = path.dentry->d_inode;  	/* Disallow write access to files with the append-only bit set  	 * or any access when mandatory locking enabled @@ -792,8 +793,7 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type,  		else  			flags = O_WRONLY|O_LARGEFILE;  	} -	*filp = dentry_open(dget(dentry), mntget(fhp->fh_export->ex_path.mnt), -			    flags, current_cred()); +	*filp = dentry_open(&path, flags, current_cred());  	if (IS_ERR(*filp))  		host_err = PTR_ERR(*filp);  	else { @@ -1329,7 +1329,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  	err = 0;  	switch (type) {  	case S_IFREG: -		host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); +		host_err = vfs_create(dirp, dchild, iap->ia_mode, true);  		if (!host_err)  			nfsd_check_ignore_resizing(iap);  		break; @@ -1492,7 +1492,7 @@ do_nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  		goto out;  	} -	host_err = vfs_create(dirp, dchild, iap->ia_mode, NULL); +	host_err = vfs_create(dirp, dchild, iap->ia_mode, true);  	if (host_err < 0) {  		fh_drop_write(fhp);  		goto out_nfserr;  |