======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Not tainted
------------------------------------------------------
kworker/u4:31/11749 is trying to acquire lock:
ffff888032aec990 (jbd2_handle){++++}-{0:0}, at: wait_transaction_locked+0x199/0x260 fs/jbd2/transaction.c:177
but task is already holding lock:
ffff8880291238e8 (&journal->j_trans_barrier){.+.+}-{3:3}, at: ocfs2_start_trans+0x366/0x6c0 fs/ocfs2/journal.c:374
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #5 (&journal->j_trans_barrier){.+.+}-{3:3}:
down_read+0x42/0x2d0 kernel/locking/rwsem.c:1520
ocfs2_start_trans+0x366/0x6c0 fs/ocfs2/journal.c:374
ocfs2_modify_bh+0xe5/0x460 fs/ocfs2/quota_local.c:101
ocfs2_local_read_info+0x13b1/0x16e0 fs/ocfs2/quota_local.c:764
dquot_load_quota_sb+0x756/0xac0 fs/quota/dquot.c:2470
dquot_load_quota_inode+0x2d8/0x5d0 fs/quota/dquot.c:2507
ocfs2_enable_quotas+0x1c3/0x440 fs/ocfs2/super.c:926
ocfs2_fill_super+0x409f/0x4d00 fs/ocfs2/super.c:1139
mount_bdev+0x287/0x3c0 fs/super.c:1443
legacy_get_tree+0xe6/0x180 fs/fs_context.c:632
vfs_get_tree+0x88/0x270 fs/super.c:1573
do_new_mount+0x24a/0xa40 fs/namespace.c:3078
do_mount fs/namespace.c:3421 [inline]
__do_sys_mount fs/namespace.c:3629 [inline]
__se_sys_mount+0x2d6/0x3c0 fs/namespace.c:3606
do_syscall_x64 arch/x86/entry/common.c:46 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:76
entry_SYSCALL_64_after_hwframe+0x68/0xd2
-> #4 (sb_internal#4){.+.+}-{0:0}:
percpu_down_read include/linux/percpu-rwsem.h:51 [inline]
__sb_start_write include/linux/fs.h:1891 [inline]
sb_start_intwrite include/linux/fs.h:2013 [inline]
ocfs2_start_trans+0x267/0x6c0 fs/ocfs2/journal.c:372
ocfs2_acquire_dquot+0x66e/0xb10 fs/ocfs2/quota_global.c:848
dqget+0x778/0xeb0 fs/quota/dquot.c:988
__dquot_initialize+0x3b6/0xcb0 fs/quota/dquot.c:1517
ocfs2_get_init_inode+0x138/0x1b0 fs/ocfs2/namei.c:202
ocfs2_mknod+0x8be/0x2350 fs/ocfs2/namei.c:310
ocfs2_create+0x1b6/0x4a0 fs/ocfs2/namei.c:674
lookup_open fs/namei.c:3490 [inline]
open_last_lookups fs/namei.c:3558 [inline]
path_openat+0x1187/0x2e70 fs/namei.c:3788
do_filp_open+0x1c1/0x3c0 fs/namei.c:3818
do_sys_openat2+0x142/0x490 fs/open.c:1320
do_sys_open fs/open.c:1336 [inline]
__do_sys_openat fs/open.c:1352 [inline]
__se_sys_openat fs/open.c:1347 [inline]
__x64_sys_openat+0x135/0x160 fs/open.c:1347
do_syscall_x64 arch/x86/entry/common.c:46 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:76
entry_SYSCALL_64_after_hwframe+0x68/0xd2
-> #3 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}:
down_write+0x36/0x60 kernel/locking/rwsem.c:1573
ocfs2_create_local_dquot+0x1a0/0x1790 fs/ocfs2/quota_local.c:1224
ocfs2_acquire_dquot+0x7ae/0xb10 fs/ocfs2/quota_global.c:871
dqget+0x778/0xeb0 fs/quota/dquot.c:988
__dquot_initialize+0x3b6/0xcb0 fs/quota/dquot.c:1517
ocfs2_get_init_inode+0x138/0x1b0 fs/ocfs2/namei.c:202
ocfs2_mknod+0x8be/0x2350 fs/ocfs2/namei.c:310
ocfs2_create+0x1b6/0x4a0 fs/ocfs2/namei.c:674
lookup_open fs/namei.c:3490 [inline]
open_last_lookups fs/namei.c:3558 [inline]
path_openat+0x1187/0x2e70 fs/namei.c:3788
do_filp_open+0x1c1/0x3c0 fs/namei.c:3818
do_sys_openat2+0x142/0x490 fs/open.c:1320
do_sys_open fs/open.c:1336 [inline]
__do_sys_openat fs/open.c:1352 [inline]
__se_sys_openat fs/open.c:1347 [inline]
__x64_sys_openat+0x135/0x160 fs/open.c:1347
do_syscall_x64 arch/x86/entry/common.c:46 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:76
entry_SYSCALL_64_after_hwframe+0x68/0xd2
-> #2 (&dquot->dq_lock){+.+.}-{3:3}:
__mutex_lock_common kernel/locking/mutex.c:603 [inline]
__mutex_lock+0x120/0xaf0 kernel/locking/mutex.c:747
dquot_commit+0x5a/0x410 fs/quota/dquot.c:507
ext4_write_dquot+0x1f0/0x360 fs/ext4/super.c:6811
mark_dquot_dirty fs/quota/dquot.c:372 [inline]
mark_all_dquot_dirty+0xf9/0x400 fs/quota/dquot.c:412
__dquot_free_space+0x7ec/0xbc0 fs/quota/dquot.c:1942
dquot_free_space_nodirty include/linux/quotaops.h:379 [inline]
dquot_free_space include/linux/quotaops.h:384 [inline]
dquot_free_block include/linux/quotaops.h:395 [inline]
ext4_mb_clear_bb fs/ext4/mballoc.c:6154 [inline]
ext4_free_blocks+0x1bab/0x2640 fs/ext4/mballoc.c:6284
ext4_remove_blocks fs/ext4/extents.c:2526 [inline]
ext4_ext_rm_leaf fs/ext4/extents.c:2692 [inline]
ext4_ext_remove_space+0x1f0d/0x4490 fs/ext4/extents.c:2940
ext4_ext_truncate+0x211/0x370 fs/ext4/extents.c:4470
ext4_truncate+0xa0b/0x1230 fs/ext4/inode.c:4295
ext4_process_orphan+0x1cb/0x300 fs/ext4/orphan.c:337
ext4_orphan_cleanup+0xbd3/0x1400 fs/ext4/orphan.c:472
__ext4_fill_super fs/ext4/super.c:5556 [inline]
ext4_fill_super+0x7738/0x7cd0 fs/ext4/super.c:5687
get_tree_bdev+0x3f1/0x610 fs/super.c:1366
vfs_get_tree+0x88/0x270 fs/super.c:1573
do_new_mount+0x24a/0xa40 fs/namespace.c:3078
do_mount fs/namespace.c:3421 [inline]
__do_sys_mount fs/namespace.c:3629 [inline]
__se_sys_mount+0x2d6/0x3c0 fs/namespace.c:3606
do_syscall_x64 arch/x86/entry/common.c:46 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:76
entry_SYSCALL_64_after_hwframe+0x68/0xd2
-> #1 (&ei->i_data_sem){++++}-{3:3}:
down_write+0x36/0x60 kernel/locking/rwsem.c:1573
ext4_truncate+0x987/0x1230 fs/ext4/inode.c:4290
ext4_setattr+0x10cb/0x19f0 fs/ext4/inode.c:5644
notify_change+0xc74/0xf40 fs/attr.c:499
do_truncate+0x197/0x220 fs/open.c:65
do_sys_ftruncate+0x312/0x3c0 fs/open.c:193
do_syscall_x64 arch/x86/entry/common.c:46 [inline]
do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:76
entry_SYSCALL_64_after_hwframe+0x68/0xd2
-> #0 (jbd2_handle){++++}-{0:0}:
check_prev_add kernel/locking/lockdep.c:3090 [inline]
check_prevs_add kernel/locking/lockdep.c:3209 [inline]
validate_chain kernel/locking/lockdep.c:3825 [inline]
__lock_acquire+0x2cf8/0x7c50 kernel/locking/lockdep.c:5049
lock_acquire+0x1b4/0x490 kernel/locking/lockdep.c:5662
wait_transaction_locked+0x1b2/0x260 fs/jbd2/transaction.c:177
add_transaction_credits fs/jbd2/transaction.c:241 [inline]
start_this_handle+0x787/0x2150 fs/jbd2/transaction.c:422
jbd2__journal_start+0x2b7/0x5a0 fs/jbd2/transaction.c:520
jbd2_journal_start+0x26/0x30 fs/jbd2/transaction.c:559
ocfs2_start_trans+0x372/0x6c0 fs/ocfs2/journal.c:376
ocfs2_release_dquot+0x48c/0xc30 fs/ocfs2/quota_global.c:749
quota_release_workfn+0x356/0x600 fs/quota/dquot.c:848
process_one_work+0x898/0x1160 kernel/workqueue.c:2292
worker_thread+0xaa2/0x1250 kernel/workqueue.c:2439
kthread+0x29d/0x330 kernel/kthread.c:376
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295
other info that might help us debug this:
Chain exists of:
jbd2_handle --> sb_internal#4 --> &journal->j_trans_barrier
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&journal->j_trans_barrier);
lock(sb_internal#4);
lock(&journal->j_trans_barrier);
lock(jbd2_handle);
*** DEADLOCK ***
7 locks held by kworker/u4:31/11749:
#0: ffff888017479138 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work+0x7a1/0x1160 kernel/workqueue.c:2267
#1: ffffc90005a8fd00 ((quota_release_work).work){+.+.}-{0:0}, at: process_one_work+0x7a1/0x1160 kernel/workqueue.c:2267
#2: ffff88804f384aa8 (&dquot->dq_lock){+.+.}-{3:3}, at: ocfs2_release_dquot+0x259/0xc30 fs/ocfs2/quota_global.c:729
#3: ffff88804f3689c8 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#4){+.+.}-{3:3}, at: inode_lock include/linux/fs.h:758 [inline]
#3: ffff88804f3689c8 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#4){+.+.}-{3:3}, at: ocfs2_lock_global_qf+0x1c7/0x270 fs/ocfs2/quota_global.c:313
#4: ffff88804f368660 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}, at: ocfs2_lock_global_qf+0x1e5/0x270 fs/ocfs2/quota_global.c:314
#5: ffff888065f7c650 (sb_internal#4){.+.+}-{0:0}, at: ocfs2_release_dquot+0x48c/0xc30 fs/ocfs2/quota_global.c:749
#6: ffff8880291238e8 (&journal->j_trans_barrier){.+.+}-{3:3}, at: ocfs2_start_trans+0x366/0x6c0 fs/ocfs2/journal.c:374
stack backtrace:
CPU: 0 PID: 11749 Comm: kworker/u4:31 Not tainted syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
Workqueue: events_unbound quota_release_workfn
Call Trace:
<TASK>
dump_stack_lvl+0x168/0x22e lib/dump_stack.c:106
check_noncircular+0x274/0x310 kernel/locking/lockdep.c:2170
check_prev_add kernel/locking/lockdep.c:3090 [inline]
check_prevs_add kernel/locking/lockdep.c:3209 [inline]
validate_chain kernel/locking/lockdep.c:3825 [inline]
__lock_acquire+0x2cf8/0x7c50 kernel/locking/lockdep.c:5049
lock_acquire+0x1b4/0x490 kernel/locking/lockdep.c:5662
wait_transaction_locked+0x1b2/0x260 fs/jbd2/transaction.c:177
add_transaction_credits fs/jbd2/transaction.c:241 [inline]
start_this_handle+0x787/0x2150 fs/jbd2/transaction.c:422
jbd2__journal_start+0x2b7/0x5a0 fs/jbd2/transaction.c:520
jbd2_journal_start+0x26/0x30 fs/jbd2/transaction.c:559
ocfs2_start_trans+0x372/0x6c0 fs/ocfs2/journal.c:376
ocfs2_release_dquot+0x48c/0xc30 fs/ocfs2/quota_global.c:749
quota_release_workfn+0x356/0x600 fs/quota/dquot.c:848
process_one_work+0x898/0x1160 kernel/workqueue.c:2292
worker_thread+0xaa2/0x1250 kernel/workqueue.c:2439
kthread+0x29d/0x330 kernel/kthread.c:376
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295
</TASK>