ext4: Remove ext4 locking of moved directory
authorJan Kara <jack@suse.cz>
Thu, 1 Jun 2023 10:58:21 +0000 (12:58 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:22:12 +0000 (16:22 +0200)
commit 3658840cd363f2be094f5dfd2f0b174a9055dd0f upstream.

Remove locking of moved directory in ext4_rename2(). We will take care
of it in VFS instead. This effectively reverts commit 0813299c586b
("ext4: Fix possible corruption when moving a directory") and followup
fixes.

CC: Ted Tso <tytso@mit.edu>
CC: stable@vger.kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <20230601105830.13168-1-jack@suse.cz>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ext4/namei.c

index 5a3dbba..0e1aeb9 100644 (file)
@@ -3834,19 +3834,10 @@ static int ext4_rename(struct user_namespace *mnt_userns, struct inode *old_dir,
                        return retval;
        }
 
-       /*
-        * We need to protect against old.inode directory getting converted
-        * from inline directory format into a normal one.
-        */
-       if (S_ISDIR(old.inode->i_mode))
-               inode_lock_nested(old.inode, I_MUTEX_NONDIR2);
-
        old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de,
                                 &old.inlined);
-       if (IS_ERR(old.bh)) {
-               retval = PTR_ERR(old.bh);
-               goto unlock_moved_dir;
-       }
+       if (IS_ERR(old.bh))
+               return PTR_ERR(old.bh);
 
        /*
         *  Check for inode number is _not_ due to possible IO errors.
@@ -4043,10 +4034,6 @@ release_bh:
        brelse(old.bh);
        brelse(new.bh);
 
-unlock_moved_dir:
-       if (S_ISDIR(old.inode->i_mode))
-               inode_unlock(old.inode);
-
        return retval;
 }