On Mon, 2024-03-18 at 17:32 +0100, Jan Kara wrote: > Commit a8b0026847b8 ("rename(): avoid a deadlock in the case of parents > having no common ancestor") added an error bail out path. However this > path does not drop the remount protection that has been acquired. Fix > the cleanup path to properly drop the remount protection. > > Fixes: a8b0026847b8 ("rename(): avoid a deadlock in the case of parents having no common ancestor") > Signed-off-by: Jan Kara <jack@xxxxxxx> > --- > fs/nfsd/vfs.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c > index 6a9464262fae..2e41eb4c3cec 100644 > --- a/fs/nfsd/vfs.c > +++ b/fs/nfsd/vfs.c > @@ -1852,7 +1852,7 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, > trap = lock_rename(tdentry, fdentry); > if (IS_ERR(trap)) { > err = (rqstp->rq_vers == 2) ? nfserr_acces : nfserr_xdev; > - goto out; > + goto out_want_write; > } > err = fh_fill_pre_attrs(ffhp); > if (err != nfs_ok) > @@ -1922,6 +1922,7 @@ nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname, int flen, > } > out_unlock: > unlock_rename(tdentry, fdentry); > +out_want_write: > fh_drop_write(ffhp); > > /* Nice catch. Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>