linux/fs/gfs2
Andreas Gruenbacher d2ab6689ed gfs2: Fix glock_hash_walk bugs
[ Upstream commit 7427f3bb49 ]

So far, glock_hash_walk took a reference on each glock it iterated over, and it
was the examiner's responsibility to drop those references.  Dropping the final
reference to a glock can sleep and the examiners are called in a RCU critical
section with spin locks held, so examiners that didn't need the extra reference
had to drop it asynchronously via gfs2_glock_queue_put or similar.  This wasn't
done correctly in thaw_glock which did call gfs2_glock_put, and not at all in
dump_glock_func.

Change glock_hash_walk to not take glock references at all.  That way, the
examiners that don't need them won't have to bother with slow asynchronous
puts, and the examiners that do need references can take them themselves.

Reported-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-11-18 19:16:19 +01:00
..
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
acl.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
aops.c gfs2: Don't release and reacquire local statfs bh 2021-08-20 09:03:46 -05:00
aops.h gfs2: mark stuffed_readpage static 2019-07-03 14:45:18 +02:00
bmap.c iomap: remove the iomap arguments to ->page_{prepare,done} 2021-08-16 21:26:33 -07:00
bmap.h gfs2: Clean up gfs2_unstuff_dinode 2021-06-29 10:56:51 +02:00
dentry.c gfs2: untangle the logic in gfs2_drevalidate 2019-09-03 09:42:41 +02:00
dir.c gfs2: Clean up gfs2_unstuff_dinode 2021-06-29 10:56:51 +02:00
dir.h gfs2: Delete an unnecessary check before brelse() 2019-09-04 20:22:17 +02:00
export.c gfs2: Minor gfs2_lookup_by_inum cleanup 2020-06-05 20:19:21 +02:00
file.c fs: remove mandatory file locking support 2021-08-23 06:15:36 -04:00
gfs2.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
glock.c gfs2: Fix glock_hash_walk bugs 2021-11-18 19:16:19 +01:00
glock.h gfs2: Allow node-wide exclusive glock sharing 2021-02-17 19:30:28 +01:00
glops.c gfs2: Delay withdraw from atomic context 2021-08-20 09:03:46 -05:00
glops.h gfs2: Split up gfs2_meta_sync into inode and rgrp versions 2020-10-29 22:16:46 +01:00
incore.h gfs2: Eliminate vestigial HIF_FIRST 2021-08-20 09:03:46 -05:00
inode.c gfs2: Switch to may_setattr in gfs2_setattr 2021-08-13 00:41:05 -04:00
inode.h Changes in gfs2: 2021-04-29 10:33:35 -07:00
lock_dlm.c gfs2: Don't call dlm after protocol is unmounted 2021-08-20 09:03:46 -05:00
log.c gfs2: tiny cleanup in gfs2_log_reserve 2021-08-19 12:31:17 -05:00
log.h gfs2: Clean up revokes on normal withdraws 2021-05-20 13:31:37 +02:00
lops.c gfs2: be more verbose replaying invalid rgrp blocks 2021-08-19 12:31:17 -05:00
lops.h gfs2: Clean up revokes on normal withdraws 2021-05-20 13:31:37 +02:00
main.c gfs2: amend SLAB_RECLAIM_ACCOUNT on gfs2 related slab cache 2021-01-22 12:19:17 -05:00
meta_io.c gfs2: don't stop reads while withdraw in progress 2021-08-20 09:03:46 -05:00
meta_io.h gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer 2021-04-03 21:38:12 +02:00
ops_fstype.c gfs2: Mark journal inodes as "don't cache" 2021-08-20 09:03:46 -05:00
quota.c gfs2: Clean up gfs2_unstuff_dinode 2021-06-29 10:56:51 +02:00
quota.h gfs2: move privileged user check to gfs2_quota_lock_check 2020-05-08 18:47:58 +02:00
recovery.c gfs2: Fix fall-through warnings for Clang 2021-04-20 22:38:21 +02:00
recovery.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
rgrp.c gfs2: Fix a number of kernel-doc warnings 2021-04-09 22:14:13 +02:00
rgrp.h gfs2: Add local resource group locking 2021-02-17 19:30:28 +01:00
super.c gfs2: nit: gfs2_drop_inode shouldn't return bool 2021-08-20 09:03:46 -05:00
super.h gfs2: Don't release and reacquire local statfs bh 2021-08-20 09:03:46 -05:00
sys.c gfs2: Add new sysfs file for gfs2 status 2021-04-08 15:07:21 +02:00
sys.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
trace_gfs2.h gfs2: Add per-reservation reserved block accounting 2021-02-17 19:30:26 +01:00
trans.c gfs2: fix use-after-free in trans_drain 2021-03-07 17:04:55 +01:00
trans.h Merge branches 'rgrp-glock-sharing' and 'gfs2-revoke' from https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git 2021-02-23 18:54:22 +01:00
util.c gfs2: Mark journal inodes as "don't cache" 2021-08-20 09:03:46 -05:00
util.h gfs2: don't stop reads while withdraw in progress 2021-08-20 09:03:46 -05:00
xattr.c gfs2: Fix a number of kernel-doc warnings 2021-04-09 22:14:13 +02:00
xattr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00