nfsd: don't leak dentry count on mnt_want_write failure
authorJ. Bruce Fields <bfields@redhat.com>
Sat, 15 Jan 2011 01:00:02 +0000 (20:00 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Mon, 14 Feb 2011 15:31:08 +0000 (10:31 -0500)
The exit cleanup isn't quite right here.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/vfs.c

index 641117f2188d5f926442da3144d61c6438cbd5c2..fda3be237773a83076a443a97de5d582c90e0d27 100644 (file)
@@ -1812,22 +1812,22 @@ nfsd_unlink(struct svc_rqst *rqstp, struct svc_fh *fhp, int type,
 
        host_err = mnt_want_write(fhp->fh_export->ex_path.mnt);
        if (host_err)
-               goto out_nfserr;
+               goto out_put;
 
        host_err = nfsd_break_lease(rdentry->d_inode);
        if (host_err)
-               goto out_put;
+               goto out_drop_write;
        if (type != S_IFDIR)
                host_err = vfs_unlink(dirp, rdentry);
        else
                host_err = vfs_rmdir(dirp, rdentry);
-out_put:
-       dput(rdentry);
-
        if (!host_err)
                host_err = commit_metadata(fhp);
-
+out_drop_write:
        mnt_drop_write(fhp->fh_export->ex_path.mnt);
+out_put:
+       dput(rdentry);
+
 out_nfserr:
        err = nfserrno(host_err);
 out: