summaryrefslogtreecommitdiff
path: root/fs/ocfs2/inode.c
diff options
context:
space:
mode:
authorYiwen Jiang <jiangyiwen@huawei.com>2014-06-24 00:22:09 +0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-06-24 03:47:45 +0400
commitf7a14f32e7e1e7e025d88e7b4c8e3cc99770f756 (patch)
tree001fd6f29f90bb7a7bd8d7533b836e781bf6e11c /fs/ocfs2/inode.c
parenta270c6d3c0d7ba914bd82da34152d1102920d805 (diff)
downloadlinux-f7a14f32e7e1e7e025d88e7b4c8e3cc99770f756.tar.xz
ocfs2: fix a tiny race when running dirop_fileop_racer
When running dirop_fileop_racer we found a dead lock case. 2 nodes, say Node A and Node B, mount the same ocfs2 volume. Create /race/16/1 in the filesystem, and let the inode number of dir 16 is less than the inode number of dir race. Node A Node B mv /race/16/1 /race/ right after Node A has got the EX mode of /race/16/, and tries to get EX mode of /race ls /race/16/ In this case, Node A has got the EX mode of /race/16/, and wants to get EX mode of /race/. Node B has got the PR mode of /race/, and wants to get the PR mode of /race/16/. Since EX and PR are mutually exclusive, dead lock happens. This patch fixes this case by locking in ancestor order before trying inode number order. Signed-off-by: Yiwen Jiang <jiangyiwen@huawei.com> Signed-off-by: Joseph Qi <joseph.qi@huawei.com> Cc: Joel Becker <jlbec@evilplan.org> Reviewed-by: Mark Fasheh <mfasheh@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ocfs2/inode.c')
0 files changed, 0 insertions, 0 deletions