All calls to done_path_update() are followed by the same two calls, so merge them in. Signed-off-by: NeilBrown <neilb@xxxxxxx> --- fs/namei.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 73c3319a1703..8df09c19f2b0 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1734,6 +1734,8 @@ static void done_path_update(struct path *path, struct dentry *dentry, inode_unlock_shared(dir); else inode_unlock(dir); + dput(dentry); + mnt_drop_write(path->mnt); } static struct dentry *lookup_fast(struct nameidata *nd) @@ -3988,8 +3990,6 @@ EXPORT_SYMBOL(kern_path_create); void done_path_create_wq(struct path *path, struct dentry *dentry, bool with_wq) { done_path_update(path, dentry, with_wq); - dput(dentry); - mnt_drop_write(path->mnt); path_put(path); } EXPORT_SYMBOL(done_path_create_wq); @@ -4310,8 +4310,6 @@ int do_rmdir(int dfd, struct filename *name) error = vfs_rmdir(mnt_userns, path.dentry->d_inode, dentry); exit3: done_path_update(&path, dentry, true); - dput(dentry); - mnt_drop_write(path.mnt); exit2: path_put(&path); if (retry_estale(error, lookup_flags)) { @@ -4446,8 +4444,6 @@ int do_unlinkat(int dfd, struct filename *name) &delegated_inode); exit3: done_path_update(&path, dentry, true); - dput(dentry); - mnt_drop_write(path.mnt); } if (inode) iput(inode); /* truncate the inode here */