====================================================== WARNING: possible circular locking dependency detected syzkaller #0 Not tainted ------------------------------------------------------ kworker/u4:7/4589 is trying to acquire lock: ffff0000eb1b8990 (jbd2_handle){++++}-{0:0}, at: wait_transaction_locked+0x15c/0x23c fs/jbd2/transaction.c:176 but task is already holding lock: ffff0000eb3174e8 (&journal->j_trans_barrier){.+.+}-{3:3}, at: ocfs2_start_trans+0x38c/0x6f4 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+0x64/0x300 kernel/locking/rwsem.c:1520 ocfs2_start_trans+0x38c/0x6f4 fs/ocfs2/journal.c:374 ocfs2_modify_bh+0xd8/0x44c fs/ocfs2/quota_local.c:101 ocfs2_local_read_info+0x1054/0x13c4 fs/ocfs2/quota_local.c:764 dquot_load_quota_sb+0x68c/0x998 fs/quota/dquot.c:2495 dquot_load_quota_inode+0x274/0x4dc fs/quota/dquot.c:2532 ocfs2_enable_quotas+0x17c/0x3c4 fs/ocfs2/super.c:926 ocfs2_fill_super+0x32f8/0x417c fs/ocfs2/super.c:1139 mount_bdev+0x264/0x35c fs/super.c:1454 ocfs2_mount+0x44/0x58 fs/ocfs2/super.c:1186 legacy_get_tree+0xd8/0x174 fs/fs_context.c:632 vfs_get_tree+0x90/0x278 fs/super.c:1584 do_new_mount+0x228/0x818 fs/namespace.c:3104 path_mount+0x5ac/0xe6c fs/namespace.c:3462 do_mount fs/namespace.c:3475 [inline] __do_sys_mount fs/namespace.c:3683 [inline] __se_sys_mount fs/namespace.c:3660 [inline] __arm64_sys_mount+0x4a0/0x5a0 fs/namespace.c:3660 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline] invoke_syscall+0x98/0x290 arch/arm64/kernel/syscall.c:52 el0_svc_common+0x13c/0x258 arch/arm64/kernel/syscall.c:140 do_el0_svc+0x5c/0x134 arch/arm64/kernel/syscall.c:204 el0_svc+0x58/0x12c arch/arm64/kernel/entry-common.c:637 el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655 el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:589 -> #4 (sb_internal#2){.+.+}-{0:0}: percpu_down_read include/linux/percpu-rwsem.h:51 [inline] __sb_start_write include/linux/fs.h:1897 [inline] sb_start_intwrite include/linux/fs.h:2019 [inline] ocfs2_start_trans+0x20c/0x6f4 fs/ocfs2/journal.c:372 ocfs2_acquire_dquot+0x5d0/0xab0 fs/ocfs2/quota_global.c:848 dqget+0x638/0xa98 fs/quota/dquot.c:1013 dquot_set_dqblk+0x40/0xe34 fs/quota/dquot.c:2858 quota_setquota+0x41c/0x4cc fs/quota/quota.c:310 do_quotactl+0x65c/0x738 fs/quota/quota.c:802 __do_sys_quotactl fs/quota/quota.c:960 [inline] __se_sys_quotactl fs/quota/quota.c:916 [inline] __arm64_sys_quotactl+0x2dc/0x77c fs/quota/quota.c:916 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline] invoke_syscall+0x98/0x290 arch/arm64/kernel/syscall.c:52 el0_svc_common+0x13c/0x258 arch/arm64/kernel/syscall.c:140 do_el0_svc+0x5c/0x134 arch/arm64/kernel/syscall.c:204 el0_svc+0x58/0x12c arch/arm64/kernel/entry-common.c:637 el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655 el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:589 -> #3 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}: down_write+0x5c/0x88 kernel/locking/rwsem.c:1573 ocfs2_create_local_dquot+0x140/0x1444 fs/ocfs2/quota_local.c:1224 ocfs2_acquire_dquot+0x6dc/0xab0 fs/ocfs2/quota_global.c:871 dqget+0x638/0xa98 fs/quota/dquot.c:1013 dquot_set_dqblk+0x40/0xe34 fs/quota/dquot.c:2858 quota_setquota+0x41c/0x4cc fs/quota/quota.c:310 do_quotactl+0x65c/0x738 fs/quota/quota.c:802 __do_sys_quotactl fs/quota/quota.c:960 [inline] __se_sys_quotactl fs/quota/quota.c:916 [inline] __arm64_sys_quotactl+0x2dc/0x77c fs/quota/quota.c:916 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline] invoke_syscall+0x98/0x290 arch/arm64/kernel/syscall.c:52 el0_svc_common+0x13c/0x258 arch/arm64/kernel/syscall.c:140 do_el0_svc+0x5c/0x134 arch/arm64/kernel/syscall.c:204 el0_svc+0x58/0x12c arch/arm64/kernel/entry-common.c:637 el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655 el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:589 -> #2 (&dquot->dq_lock){+.+.}-{3:3}: __mutex_lock_common+0x1a0/0x1f88 kernel/locking/mutex.c:603 __mutex_lock kernel/locking/mutex.c:747 [inline] mutex_lock_nested+0x38/0x44 kernel/locking/mutex.c:799 wait_on_dquot fs/quota/dquot.c:359 [inline] dqget+0x5c8/0xa98 fs/quota/dquot.c:1008 dquot_transfer+0x328/0x72c fs/quota/dquot.c:2175 ext4_setattr+0x7ac/0x15e4 fs/ext4/inode.c:5560 notify_change+0xb5c/0xe20 fs/attr.c:499 chown_common+0x430/0x59c fs/open.c:736 vfs_fchown fs/open.c:804 [inline] ksys_fchown+0xe0/0x158 fs/open.c:815 __do_sys_fchown fs/open.c:823 [inline] __se_sys_fchown fs/open.c:821 [inline] __arm64_sys_fchown+0x7c/0x94 fs/open.c:821 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline] invoke_syscall+0x98/0x290 arch/arm64/kernel/syscall.c:52 el0_svc_common+0x13c/0x258 arch/arm64/kernel/syscall.c:140 do_el0_svc+0x5c/0x134 arch/arm64/kernel/syscall.c:204 el0_svc+0x58/0x12c arch/arm64/kernel/entry-common.c:637 el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655 el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:589 -> #1 (&ei->xattr_sem){.+.+}-{3:3}: down_read+0x64/0x300 kernel/locking/rwsem.c:1520 ext4_setattr+0x79c/0x15e4 fs/ext4/inode.c:5559 notify_change+0xb5c/0xe20 fs/attr.c:499 chown_common+0x430/0x59c fs/open.c:736 do_fchownat+0x13c/0x248 fs/open.c:767 __do_sys_fchownat fs/open.c:782 [inline] __se_sys_fchownat fs/open.c:779 [inline] __arm64_sys_fchownat+0xc0/0xdc fs/open.c:779 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline] invoke_syscall+0x98/0x290 arch/arm64/kernel/syscall.c:52 el0_svc_common+0x13c/0x258 arch/arm64/kernel/syscall.c:140 do_el0_svc+0x5c/0x134 arch/arm64/kernel/syscall.c:204 el0_svc+0x58/0x12c arch/arm64/kernel/entry-common.c:637 el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655 el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:589 -> #0 (jbd2_handle){++++}-{0:0}: check_prev_add kernel/locking/lockdep.c:3162 [inline] check_prevs_add kernel/locking/lockdep.c:3281 [inline] validate_chain kernel/locking/lockdep.c:3897 [inline] __lock_acquire+0x3504/0x7280 kernel/locking/lockdep.c:5171 lock_acquire+0x210/0x63c kernel/locking/lockdep.c:5790 wait_transaction_locked+0x184/0x23c fs/jbd2/transaction.c:177 add_transaction_credits+0x104/0xaf0 fs/jbd2/transaction.c:-1 start_this_handle+0x4dc/0x125c fs/jbd2/transaction.c:422 jbd2__journal_start+0x288/0x530 fs/jbd2/transaction.c:520 jbd2_journal_start+0x3c/0x4c fs/jbd2/transaction.c:559 ocfs2_start_trans+0x398/0x6f4 fs/ocfs2/journal.c:376 ocfs2_release_dquot+0x3d0/0xac0 fs/ocfs2/quota_global.c:749 quota_release_workfn+0x374/0x618 fs/quota/dquot.c:875 process_one_work+0x7e4/0x13bc kernel/workqueue.c:2292 worker_thread+0x8cc/0xfe8 kernel/workqueue.c:2439 kthread+0x254/0x2e0 kernel/kthread.c:376 ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:854 other info that might help us debug this: Chain exists of: jbd2_handle --> sb_internal#2 --> &journal->j_trans_barrier Possible unsafe locking scenario: CPU0 CPU1 ---- ---- rlock(&journal->j_trans_barrier); lock(sb_internal#2); lock(&journal->j_trans_barrier); lock(jbd2_handle); *** DEADLOCK *** 7 locks held by kworker/u4:7/4589: #0: ffff0000c4bd2138 ((wq_completion)quota_events_unbound){+.+.}-{0:0}, at: process_one_work+0x69c/0x13bc kernel/workqueue.c:-1 #1: ffff8000226b7c40 ((quota_release_work).work){+.+.}-{0:0}, at: process_one_work+0x6e8/0x13bc kernel/workqueue.c:2267 #2: ffff0000f8ab16a8 (&dquot->dq_lock){+.+.}-{3:3}, at: ocfs2_release_dquot+0x238/0xac0 fs/ocfs2/quota_global.c:729 #3: ffff00010040d108 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#2){+.+.}-{3:3}, at: inode_lock include/linux/fs.h:764 [inline] #3: ffff00010040d108 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#2){+.+.}-{3:3}, at: ocfs2_lock_global_qf+0x190/0x23c fs/ocfs2/quota_global.c:313 #4: ffff00010040cda0 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}, at: ocfs2_lock_global_qf+0x1ac/0x23c fs/ocfs2/quota_global.c:314 #5: ffff0000f342c650 (sb_internal#2){.+.+}-{0:0}, at: ocfs2_release_dquot+0x3d0/0xac0 fs/ocfs2/quota_global.c:749 #6: ffff0000eb3174e8 (&journal->j_trans_barrier){.+.+}-{3:3}, at: ocfs2_start_trans+0x38c/0x6f4 fs/ocfs2/journal.c:374 stack backtrace: CPU: 0 PID: 4589 Comm: kworker/u4:7 Not tainted syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/06/2026 Workqueue: quota_events_unbound quota_release_workfn Call trace: dump_backtrace+0x1c4/0x1f0 arch/arm64/kernel/stacktrace.c:158 show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:165 __dump_stack+0x30/0x40 lib/dump_stack.c:88 dump_stack_lvl+0xf4/0x15c lib/dump_stack.c:106 dump_stack+0x1c/0x5c lib/dump_stack.c:113 print_circular_bug+0x148/0x1b0 kernel/locking/lockdep.c:2088 check_noncircular+0x290/0x370 kernel/locking/lockdep.c:2215 check_prev_add kernel/locking/lockdep.c:3162 [inline] check_prevs_add kernel/locking/lockdep.c:3281 [inline] validate_chain kernel/locking/lockdep.c:3897 [inline] __lock_acquire+0x3504/0x7280 kernel/locking/lockdep.c:5171 lock_acquire+0x210/0x63c kernel/locking/lockdep.c:5790 wait_transaction_locked+0x184/0x23c fs/jbd2/transaction.c:177 add_transaction_credits+0x104/0xaf0 fs/jbd2/transaction.c:-1 start_this_handle+0x4dc/0x125c fs/jbd2/transaction.c:422 jbd2__journal_start+0x288/0x530 fs/jbd2/transaction.c:520 jbd2_journal_start+0x3c/0x4c fs/jbd2/transaction.c:559 ocfs2_start_trans+0x398/0x6f4 fs/ocfs2/journal.c:376 ocfs2_release_dquot+0x3d0/0xac0 fs/ocfs2/quota_global.c:749 quota_release_workfn+0x374/0x618 fs/quota/dquot.c:875 process_one_work+0x7e4/0x13bc kernel/workqueue.c:2292 worker_thread+0x8cc/0xfe8 kernel/workqueue.c:2439 kthread+0x254/0x2e0 kernel/kthread.c:376 ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:854