linux/fs/gfs2
Alexander Aring 515b269d5b gfs2: set lockdep subclass for iopen glocks
This patch introduce a new globs attribute to define the subclass of the
glock lockref spinlock. This avoid the following lockdep warning, which
occurs when we lock an inode lock while an iopen lock is held:

============================================
WARNING: possible recursive locking detected
5.10.0-rc3+ #4990 Not tainted
--------------------------------------------
kworker/0:1/12 is trying to acquire lock:
ffff9067d45672d8 (&gl->gl_lockref.lock){+.+.}-{3:3}, at: lockref_get+0x9/0x20

but task is already holding lock:
ffff9067da308588 (&gl->gl_lockref.lock){+.+.}-{3:3}, at: delete_work_func+0x164/0x260

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&gl->gl_lockref.lock);
  lock(&gl->gl_lockref.lock);

 *** DEADLOCK ***

 May be due to missing lock nesting notation

3 locks held by kworker/0:1/12:
 #0: ffff9067c1bfdd38 ((wq_completion)delete_workqueue){+.+.}-{0:0}, at: process_one_work+0x1b7/0x540
 #1: ffffac594006be70 ((work_completion)(&(&gl->gl_delete)->work)){+.+.}-{0:0}, at: process_one_work+0x1b7/0x540
 #2: ffff9067da308588 (&gl->gl_lockref.lock){+.+.}-{3:3}, at: delete_work_func+0x164/0x260

stack backtrace:
CPU: 0 PID: 12 Comm: kworker/0:1 Not tainted 5.10.0-rc3+ #4990
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-2.fc32 04/01/2014
Workqueue: delete_workqueue delete_work_func
Call Trace:
 dump_stack+0x8b/0xb0
 __lock_acquire.cold+0x19e/0x2e3
 lock_acquire+0x150/0x410
 ? lockref_get+0x9/0x20
 _raw_spin_lock+0x27/0x40
 ? lockref_get+0x9/0x20
 lockref_get+0x9/0x20
 delete_work_func+0x188/0x260
 process_one_work+0x237/0x540
 worker_thread+0x4d/0x3b0
 ? process_one_work+0x540/0x540
 kthread+0x127/0x140
 ? __kthread_bind_mask+0x60/0x60
 ret_from_fork+0x22/0x30

Suggested-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
2020-11-24 23:45:58 +01:00
..
acl.c gfs2: Change inode qa_data to allow multiple users 2020-03-27 14:08:04 -05:00
acl.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
aops.c gfs2: Fix case in which ail writes are done to jdata holes 2020-11-12 18:55:20 +01:00
aops.h gfs2: mark stuffed_readpage static 2019-07-03 14:45:18 +02:00
bmap.c Revert "gfs2: Ignore journal log writes for jdata holes" 2020-11-12 18:41:57 +01:00
bmap.h gfs2: use iomap for buffered I/O in ordered and writeback mode 2020-10-14 23:54:42 +02:00
dentry.c gfs2: untangle the logic in gfs2_drevalidate 2019-09-03 09:42:41 +02:00
dir.c mm: remove the pgprot argument to __vmalloc 2020-06-02 10:59:11 -07: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 Changes in gfs2: 2020-08-10 18:22:43 -07:00
gfs2.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
glock.c gfs2: set lockdep subclass for iopen glocks 2020-11-24 23:45:58 +01:00
glock.h Merge branch 'gfs2-iopen' into for-next 2020-06-05 21:25:36 +02:00
glops.c gfs2: set lockdep subclass for iopen glocks 2020-11-24 23:45:58 +01: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: set lockdep subclass for iopen glocks 2020-11-24 23:45:58 +01:00
inode.c gfs2: Don't call cancel_delayed_work_sync from within delete work function 2020-11-02 21:34:47 +01:00
inode.h gfs2: Minor gfs2_lookup_by_inum cleanup 2020-06-05 20:19:21 +02:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
lock_dlm.c gfs2: Force withdraw to replay journals and wait for it to finish 2020-02-27 07:53:12 -06:00
log.c gfs2: Fix case in which ail writes are done to jdata holes 2020-11-12 18:55:20 +01:00
log.h gfs2: Wipe jdata and ail1 in gfs2_journal_wipe, formerly gfs2_meta_wipe 2020-10-15 14:29:03 +02:00
lops.c gfs2: Split up gfs2_meta_sync into inode and rgrp versions 2020-10-29 22:16:46 +01:00
lops.h gfs2: Split up gfs2_meta_sync into inode and rgrp versions 2020-10-29 22:16:46 +01:00
main.c gfs2: eliminate GIF_ORDERED in favor of list_empty 2020-07-03 12:05:34 +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
meta_io.c gfs2: Wipe jdata and ail1 in gfs2_journal_wipe, formerly gfs2_meta_wipe 2020-10-15 14:29:03 +02:00
meta_io.h gfs2: Wipe jdata and ail1 in gfs2_journal_wipe, formerly gfs2_meta_wipe 2020-10-15 14:29:03 +02:00
ops_fstype.c gfs2: don't initialize statfs_change inodes in spectator mode 2020-10-29 22:16:46 +01:00
quota.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
quota.h gfs2: move privileged user check to gfs2_quota_lock_check 2020-05-08 18:47:58 +02:00
recovery.c gfs2: Split up gfs2_meta_sync into inode and rgrp versions 2020-10-29 22:16:46 +01:00
recovery.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00
rgrp.c gfs2: fix possible reference leak in gfs2_check_blk_type 2020-11-12 13:09:07 +01:00
rgrp.h gfs2: Fix NULL pointer dereference in gfs2_rgrp_dump 2020-10-14 23:54:43 +02:00
super.c gfs2: Add missing truncate_inode_pages_final for sd_aspace 2020-10-29 22:16:46 +01:00
super.h gfs2: lookup local statfs inodes prior to journal recovery 2020-10-23 15:47:14 +02:00
sys.c gfs2: use-after-free in sysfs deregistration 2020-10-14 23:54:43 +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: eliminate GLF_QUEUED flag in favor of list_empty(gl_holders) 2020-10-15 17:04:53 +02:00
trans.c gfs2: add some much needed cleanup for log flushes that fail 2020-08-24 13:54:07 +02:00
trans.h gfs2: new slab for transactions 2020-06-05 21:24:25 +02:00
util.c gfs2: Fix NULL pointer dereference in gfs2_rgrp_dump 2020-10-14 23:54:43 +02:00
util.h gfs2: Make sure we don't miss any delayed withdraws 2020-10-14 23:54:41 +02:00
xattr.c gfs2: Change inode qa_data to allow multiple users 2020-03-27 14:08:04 -05:00
xattr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 398 2019-06-05 17:37:12 +02:00