Wengang Wang
be99ca2716
fs/ocfs2: fix race in ocfs2_dentry_attach_lock()
...
ocfs2_dentry_attach_lock() can be executed in parallel threads against the
same dentry. Make that race safe. The race is like this:
thread A thread B
(A1) enter ocfs2_dentry_attach_lock,
seeing dentry->d_fsdata is NULL,
and no alias found by
ocfs2_find_local_alias, so kmalloc
a new ocfs2_dentry_lock structure
to local variable "dl", dl1
.....
(B1) enter ocfs2_dentry_attach_lock,
seeing dentry->d_fsdata is NULL,
and no alias found by
ocfs2_find_local_alias so kmalloc
a new ocfs2_dentry_lock structure
to local variable "dl", dl2.
......
(A2) set dentry->d_fsdata with dl1,
call ocfs2_dentry_lock() and increase
dl1->dl_lockres.l_ro_holders to 1 on
success.
......
(B2) set dentry->d_fsdata with dl2
call ocfs2_dentry_lock() and increase
dl2->dl_lockres.l_ro_holders to 1 on
success.
......
(A3) call ocfs2_dentry_unlock()
and decrease
dl2->dl_lockres.l_ro_holders to 0
on success.
....
(B3) call ocfs2_dentry_unlock(),
decreasing
dl2->dl_lockres.l_ro_holders, but
see it's zero now, panic
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Wengang Wang <[email protected] >
Reported-by: Daniel Sobe <[email protected] >
Tested-by: Daniel Sobe <[email protected] >
Reviewed-by: Changwei Ge <[email protected] >
Reviewed-by: Joseph Qi <[email protected] >
Cc: Mark Fasheh <[email protected] >
Cc: Joel Becker <[email protected] >
Cc: Junxiao Bi <[email protected] >
Cc: Gang He <[email protected] >
Cc: Jun Piao <[email protected] >
Cc: <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Signed-off-by: Linus Torvalds <[email protected] >
2019-06-13 17:34:56 -10:00
..
cluster
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 275
2019-06-05 17:30:30 +02:00
dlm
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
dlmfs
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
acl.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
acl.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
alloc.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
alloc.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
aops.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
aops.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
blockcheck.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
blockcheck.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
buffer_head_io.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
buffer_head_io.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
dcache.c
fs/ocfs2: fix race in ocfs2_dentry_attach_lock()
2019-06-13 17:34:56 -10:00
dcache.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
dir.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
dir.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
dlmglue.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
dlmglue.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
export.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
export.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
extent_map.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 405
2019-06-05 17:37:13 +02:00
extent_map.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 405
2019-06-05 17:37:13 +02:00
file.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
file.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
filecheck.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
2019-06-05 17:36:37 +02:00
filecheck.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
2019-06-05 17:36:37 +02:00
heartbeat.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
heartbeat.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
inode.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
inode.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
ioctl.c
ocfs2: eliminate a misreported warning
2018-06-07 17:34:33 -07:00
ioctl.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
journal.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
journal.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
Kconfig
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
localalloc.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
localalloc.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
locks.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
locks.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
Makefile
ocfs2: improve ocfs2 Makefile
2018-12-28 12:11:45 -08:00
mmap.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
mmap.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
move_extents.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
move_extents.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
namei.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
namei.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
ocfs1_fs_compat.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 405
2019-06-05 17:37:13 +02:00
ocfs2.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
ocfs2_fs.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 405
2019-06-05 17:37:13 +02:00
ocfs2_ioctl.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
ocfs2_lockid.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
ocfs2_lockingver.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
ocfs2_trace.h
ocfs2: fix the application IO timeout when fstrim is running
2019-03-05 21:07:13 -08:00
quota.h
License cleanup: add SPDX GPL-2.0 license identifier to files with no license
2017-11-02 11:10:55 +01:00
quota_global.c
ocfs2: convert to new i_version API
2018-01-29 06:42:21 -05:00
quota_local.c
ocfs2: return -EROFS when filesystem becomes read-only
2018-08-17 16:20:27 -07:00
refcounttree.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
refcounttree.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
reservations.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
reservations.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
resize.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
resize.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
slot_map.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
slot_map.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
stack_o2cb.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
2019-06-05 17:36:37 +02:00
stack_user.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
2019-06-05 17:36:37 +02:00
stackglue.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
2019-06-05 17:36:37 +02:00
stackglue.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 286
2019-06-05 17:36:37 +02:00
suballoc.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
suballoc.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
super.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
super.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
symlink.c
symlink.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
sysfile.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
sysfile.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
uptodate.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
uptodate.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 145
2019-05-30 11:25:18 -07:00
xattr.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
xattr.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00