diff options
Diffstat (limited to 'fs/nfsd/vfs.c')
| -rw-r--r-- | fs/nfsd/vfs.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index ba944123167b..ff476e654b8f 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -1252,10 +1252,13 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,  	if (IS_ERR(dchild))  		return nfserrno(host_err);  	err = fh_compose(resfhp, fhp->fh_export, dchild, fhp); -	if (err) { -		dput(dchild); +	/* +	 * We unconditionally drop our ref to dchild as fh_compose will have +	 * already grabbed its own ref for it. +	 */ +	dput(dchild); +	if (err)  		return err; -	}  	return nfsd_create_locked(rqstp, fhp, fname, flen, iap, type,  					rdev, resfhp);  }  |