mirror of https://gitee.com/openkylin/linux.git
ocfs2: adjust code to match locking/unlocking order
Unlocking order in ocfs2_unlink and ocfs2_rename mismatches the corresponding locking order, although it won't cause issues, adjust the code so that it looks more reasonable. Signed-off-by: Joseph Qi <joseph.qi@huawei.com> Cc: Mark Fasheh <mfasheh@suse.com> Cc: Joel Becker <jlbec@evilplan.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
bf59e6623a
commit
3cb2ec43f6
|
@ -1035,11 +1035,6 @@ static int ocfs2_unlink(struct inode *dir,
|
|||
if (handle)
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
|
||||
if (child_locked)
|
||||
ocfs2_inode_unlock(inode, 1);
|
||||
|
||||
ocfs2_inode_unlock(dir, 1);
|
||||
|
||||
if (orphan_dir) {
|
||||
/* This was locked for us in ocfs2_prepare_orphan_dir() */
|
||||
ocfs2_inode_unlock(orphan_dir, 1);
|
||||
|
@ -1047,6 +1042,11 @@ static int ocfs2_unlink(struct inode *dir,
|
|||
iput(orphan_dir);
|
||||
}
|
||||
|
||||
if (child_locked)
|
||||
ocfs2_inode_unlock(inode, 1);
|
||||
|
||||
ocfs2_inode_unlock(dir, 1);
|
||||
|
||||
brelse(fe_bh);
|
||||
brelse(parent_node_bh);
|
||||
|
||||
|
@ -1633,21 +1633,9 @@ static int ocfs2_rename(struct inode *old_dir,
|
|||
ocfs2_dentry_move(old_dentry, new_dentry, old_dir, new_dir);
|
||||
status = 0;
|
||||
bail:
|
||||
if (rename_lock)
|
||||
ocfs2_rename_unlock(osb);
|
||||
|
||||
if (handle)
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
|
||||
if (parents_locked)
|
||||
ocfs2_double_unlock(old_dir, new_dir);
|
||||
|
||||
if (old_child_locked)
|
||||
ocfs2_inode_unlock(old_inode, 1);
|
||||
|
||||
if (new_child_locked)
|
||||
ocfs2_inode_unlock(new_inode, 1);
|
||||
|
||||
if (orphan_dir) {
|
||||
/* This was locked for us in ocfs2_prepare_orphan_dir() */
|
||||
ocfs2_inode_unlock(orphan_dir, 1);
|
||||
|
@ -1655,6 +1643,18 @@ static int ocfs2_rename(struct inode *old_dir,
|
|||
iput(orphan_dir);
|
||||
}
|
||||
|
||||
if (new_child_locked)
|
||||
ocfs2_inode_unlock(new_inode, 1);
|
||||
|
||||
if (old_child_locked)
|
||||
ocfs2_inode_unlock(old_inode, 1);
|
||||
|
||||
if (parents_locked)
|
||||
ocfs2_double_unlock(old_dir, new_dir);
|
||||
|
||||
if (rename_lock)
|
||||
ocfs2_rename_unlock(osb);
|
||||
|
||||
if (new_inode)
|
||||
sync_mapping_buffers(old_inode->i_mapping);
|
||||
|
||||
|
|
Loading…
Reference in New Issue