syzbot


possible deadlock in wait_transaction_locked

Status: upstream: reported on 2026/01/12 10:36
Reported-by: syzbot+8f8d45b5fea78a80274f@syzkaller.appspotmail.com
First crash: 3d20h, last: 21h44m
Similar bugs (3)
Kernel Title Rank 🛈 Repro Cause bisect Fix bisect Count Last Reported Patched Status
upstream possible deadlock in wait_transaction_locked ext4 4 3 588d 607d 0/29 auto-obsoleted due to no activity on 2024/09/14 08:21
upstream possible deadlock in wait_transaction_locked (3) ext4 4 14 3d03h 16d 0/29 upstream: reported on 2025/12/30 11:48
upstream possible deadlock in wait_transaction_locked (2) ext4 4 1 372d 368d 0/29 auto-obsoleted due to no activity on 2025/04/18 23:41

Sample crash report:
======================================================
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>

Crashes (5):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/01/12 23:10 linux-6.1.y bec0e10ee67e d6526ea3 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan possible deadlock in wait_transaction_locked
2026/01/12 23:08 linux-6.1.y bec0e10ee67e d6526ea3 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan possible deadlock in wait_transaction_locked
2026/01/15 09:03 linux-6.1.y bec0e10ee67e d6526ea3 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan-arm64 possible deadlock in wait_transaction_locked
2026/01/12 10:45 linux-6.1.y bec0e10ee67e d6526ea3 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan-arm64 possible deadlock in wait_transaction_locked
2026/01/12 10:35 linux-6.1.y bec0e10ee67e d6526ea3 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan-arm64 possible deadlock in wait_transaction_locked
* Struck through repros no longer work on HEAD.