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: Jan Kara <jack@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
49db9b1b86
commit
9d618d19b2
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue