Commit 9d618d19 authored by Jan Kara's avatar Jan Kara Committed by Al Viro
Browse files

ocfs2: Avoid touching renamed directory if parent does not change



The VFS will not be locking moved directory if its parent does not
change. Change ocfs2 rename code to avoid touching renamed directory if
its parent does not change as without locking that can corrupt the
filesystem.

Signed-off-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 49db9b1b
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -1336,7 +1336,7 @@ static int ocfs2_rename(struct mnt_idmap *idmap,
		goto bail;
	}

	if (S_ISDIR(old_inode->i_mode)) {
	if (S_ISDIR(old_inode->i_mode) && new_dir != old_dir) {
		u64 old_inode_parent;

		update_dot_dot = 1;
@@ -1353,8 +1353,7 @@ static int ocfs2_rename(struct mnt_idmap *idmap,
			goto bail;
		}

		if (!new_inode && new_dir != old_dir &&
		    new_dir->i_nlink >= ocfs2_link_max(osb)) {
		if (!new_inode && new_dir->i_nlink >= ocfs2_link_max(osb)) {
			status = -EMLINK;
			goto bail;
		}
@@ -1601,6 +1600,9 @@ static int ocfs2_rename(struct mnt_idmap *idmap,
			mlog_errno(status);
			goto bail;
		}
	}

	if (S_ISDIR(old_inode->i_mode)) {
		drop_nlink(old_dir);
		if (new_inode) {
			drop_nlink(new_inode);