syzbot


possible deadlock in ocfs2_remove_btree_range

Status: upstream: reported on 2026/01/29 20:10
Reported-by: syzbot+69c0df05e9a71a6ea62e@syzkaller.appspotmail.com
First crash: 3d02h, last: 3d02h
Similar bugs (3)
Kernel Title Rank 🛈 Repro Cause bisect Fix bisect Count Last Reported Patched Status
upstream possible deadlock in ocfs2_remove_btree_range (2) ocfs2 4 1 88d 84d 0/29 upstream: reported on 2025/11/09 02:45
linux-5.15 possible deadlock in ocfs2_remove_btree_range 4 1 504d 504d 0/3 auto-obsoleted due to no activity on 2024/12/24 02:14
upstream possible deadlock in ocfs2_remove_btree_range ocfs2 4 2 435d 461d 0/29 auto-obsoleted due to no activity on 2025/03/03 19:57

Sample crash report:
======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Not tainted
------------------------------------------------------
syz.3.251/5370 is trying to acquire lock:
ffff0000e1a209c8 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#8){+.+.}-{3:3}, at: inode_lock include/linux/fs.h:758 [inline]
ffff0000e1a209c8 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#8){+.+.}-{3:3}, at: ocfs2_remove_btree_range+0x514/0x1260 fs/ocfs2/alloc.c:5742

but task is already holding lock:
ffff0000f7350660 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}, at: __ocfs2_change_file_space+0x660/0xc5c fs/ocfs2/file.c:2015

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #4 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}:
       down_write+0x5c/0x88 kernel/locking/rwsem.c:1573
       ocfs2_create_local_dquot+0x144/0x13d4 fs/ocfs2/quota_local.c:1224
       ocfs2_acquire_dquot+0x6f4/0xac8 fs/ocfs2/quota_global.c:871
       dqget+0x654/0xcc4 fs/quota/dquot.c:988
       __dquot_initialize+0x2fc/0xacc fs/quota/dquot.c:1517
       dquot_initialize+0x24/0x34 fs/quota/dquot.c:1579
       ocfs2_get_init_inode+0x140/0x1b4 fs/ocfs2/namei.c:202
       ocfs2_mknod+0x7bc/0x2110 fs/ocfs2/namei.c:310
       ocfs2_create+0x19c/0x4f8 fs/ocfs2/namei.c:674
       lookup_open fs/namei.c:3490 [inline]
       open_last_lookups fs/namei.c:3558 [inline]
       path_openat+0xe18/0x26bc fs/namei.c:3788
       do_filp_open+0x194/0x384 fs/namei.c:3818
       do_sys_openat2+0x134/0x3f4 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]
       __arm64_sys_openat+0x118/0x14c fs/open.c:1347
       __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
       invoke_syscall+0x98/0x2b4 arch/arm64/kernel/syscall.c:52
       el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
       do_el0_svc+0x58/0x130 arch/arm64/kernel/syscall.c:204
       el0_svc+0x58/0x128 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:585

-> #3 (&dquot->dq_lock){+.+.}-{3:3}:
       __mutex_lock_common+0x190/0x1f60 kernel/locking/mutex.c:603
       __mutex_lock kernel/locking/mutex.c:747 [inline]
       mutex_lock_nested+0x38/0x44 kernel/locking/mutex.c:799
       dquot_commit+0x50/0x1c4 fs/quota/dquot.c:507
       ext4_write_dquot+0x1b4/0x31c fs/ext4/super.c:6811
       ext4_mark_dquot_dirty+0xe8/0x140 fs/ext4/super.c:6888
       mark_dquot_dirty fs/quota/dquot.c:372 [inline]
       mark_all_dquot_dirty+0x108/0x424 fs/quota/dquot.c:412
       __dquot_alloc_space+0x560/0xce0 fs/quota/dquot.c:1752
       dquot_alloc_space_nodirty include/linux/quotaops.h:300 [inline]
       dquot_alloc_space include/linux/quotaops.h:313 [inline]
       dquot_alloc_block include/linux/quotaops.h:337 [inline]
       ext4_mb_new_blocks+0xd48/0x4338 fs/ext4/mballoc.c:5738
       ext4_ext_map_blocks+0x1394/0x56f4 fs/ext4/extents.c:4340
       ext4_map_blocks+0x860/0x1778 fs/ext4/inode.c:679
       _ext4_get_block+0x19c/0x4d8 fs/ext4/inode.c:822
       ext4_get_block_unwritten+0x3c/0x110 fs/ext4/inode.c:855
       ext4_block_write_begin+0x50c/0x10e4 fs/ext4/inode.c:1124
       ext4_write_begin+0x5f4/0x131c fs/ext4/ext4_jbd2.h:-1
       ext4_da_write_begin+0x348/0x990 fs/ext4/inode.c:3000
       pagecache_write+0x1e0/0x394 fs/ext4/verity.c:85
       ext4_write_merkle_tree_block+0xac/0xfc fs/ext4/verity.c:388
       build_merkle_tree_level fs/verity/enable.c:121 [inline]
       build_merkle_tree fs/verity/enable.c:182 [inline]
       enable_verity+0xf88/0x199c fs/verity/enable.c:268
       fsverity_ioctl_enable+0x3d4/0x45c fs/verity/enable.c:392
       __ext4_ioctl fs/ext4/ioctl.c:1580 [inline]
       ext4_ioctl+0x167c/0x42dc fs/ext4/ioctl.c:1614
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:870 [inline]
       __se_sys_ioctl fs/ioctl.c:856 [inline]
       __arm64_sys_ioctl+0x14c/0x1c8 fs/ioctl.c:856
       __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
       invoke_syscall+0x98/0x2b4 arch/arm64/kernel/syscall.c:52
       el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
       do_el0_svc+0x58/0x130 arch/arm64/kernel/syscall.c:204
       el0_svc+0x58/0x128 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:585

-> #2 (&ei->i_data_sem){++++}-{3:3}:
       down_write+0x5c/0x88 kernel/locking/rwsem.c:1573
       ext4_map_blocks+0x7c4/0x1778 fs/ext4/inode.c:672
       mpage_map_one_extent fs/ext4/inode.c:2434 [inline]
       mpage_map_and_submit_extent fs/ext4/inode.c:2487 [inline]
       ext4_writepages+0xdbc/0x28b4 fs/ext4/inode.c:2855
       do_writepages+0x2b0/0x504 mm/page-writeback.c:2491
       __writeback_single_inode+0x164/0x1554 fs/fs-writeback.c:1622
       writeback_sb_inodes+0x858/0x143c fs/fs-writeback.c:1913
       __writeback_inodes_wb+0x110/0x394 fs/fs-writeback.c:1984
       wb_writeback+0x428/0xfcc fs/fs-writeback.c:2089
       wb_check_background_flush fs/fs-writeback.c:2155 [inline]
       wb_do_writeback fs/fs-writeback.c:2243 [inline]
       wb_workfn+0xb38/0xe18 fs/fs-writeback.c:2270
       process_one_work+0x7f8/0x13a4 kernel/workqueue.c:2292
       worker_thread+0x8c4/0xfec kernel/workqueue.c:2439
       kthread+0x250/0x2d8 kernel/kthread.c:376
       ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:850

-> #1 (jbd2_handle){++++}-{0:0}:
       jbd2_journal_lock_updates+0xa8/0x314 fs/jbd2/transaction.c:880
       __ocfs2_flush_truncate_log+0x26c/0x10a8 fs/ocfs2/alloc.c:6029
       ocfs2_flush_truncate_log+0x48/0x68 fs/ocfs2/alloc.c:6076
       ocfs2_sync_fs+0x100/0x2c0 fs/ocfs2/super.c:402
       sync_filesystem+0x1a0/0x218 fs/sync.c:66
       generic_shutdown_super+0x70/0x324 fs/super.c:474
       kill_block_super+0x70/0xdc fs/super.c:1470
       deactivate_locked_super+0xac/0x120 fs/super.c:332
       deactivate_super+0xe4/0x104 fs/super.c:363
       cleanup_mnt+0x390/0x418 fs/namespace.c:1191
       __cleanup_mnt+0x20/0x30 fs/namespace.c:1198
       task_work_run+0x1ec/0x278 kernel/task_work.c:203
       resume_user_mode_work include/linux/resume_user_mode.h:49 [inline]
       do_notify_resume+0x1fa0/0x2aa4 arch/arm64/kernel/signal.c:1137
       prepare_exit_to_user_mode arch/arm64/kernel/entry-common.c:137 [inline]
       exit_to_user_mode arch/arm64/kernel/entry-common.c:142 [inline]
       el0_svc+0x98/0x128 arch/arm64/kernel/entry-common.c:638
       el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
       el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:585

-> #0 (&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#8){+.+.}-{3:3}:
       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+0x2880/0x6800 kernel/locking/lockdep.c:5049
       lock_acquire+0x20c/0x63c kernel/locking/lockdep.c:5662
       down_write+0x5c/0x88 kernel/locking/rwsem.c:1573
       inode_lock include/linux/fs.h:758 [inline]
       ocfs2_remove_btree_range+0x514/0x1260 fs/ocfs2/alloc.c:5742
       ocfs2_remove_inode_range+0xb98/0x2390 fs/ocfs2/file.c:1907
       __ocfs2_change_file_space+0x71c/0xc5c fs/ocfs2/file.c:2028
       ocfs2_fallocate+0x1f0/0x224 fs/ocfs2/file.c:2138
       vfs_fallocate+0x4a4/0x5f4 fs/open.c:323
       ksys_fallocate fs/open.c:346 [inline]
       __do_sys_fallocate fs/open.c:354 [inline]
       __se_sys_fallocate fs/open.c:352 [inline]
       __arm64_sys_fallocate+0xc0/0x110 fs/open.c:352
       __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
       invoke_syscall+0x98/0x2b4 arch/arm64/kernel/syscall.c:52
       el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
       do_el0_svc+0x58/0x130 arch/arm64/kernel/syscall.c:204
       el0_svc+0x58/0x128 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:585

other info that might help us debug this:

Chain exists of:
  &ocfs2_sysfile_lock_key[args->fi_sysfile_type]#8 --> &dquot->dq_lock --> &ocfs2_quota_ip_alloc_sem_key

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&ocfs2_quota_ip_alloc_sem_key);
                               lock(&dquot->dq_lock);
                               lock(&ocfs2_quota_ip_alloc_sem_key);
  lock(&ocfs2_sysfile_lock_key[args->fi_sysfile_type]#8);

 *** DEADLOCK ***

3 locks held by syz.3.251/5370:
 #0: ffff0000d5ec0460 (sb_writers#14){.+.+}-{0:0}, at: file_start_write include/linux/fs.h:3015 [inline]
 #0: ffff0000d5ec0460 (sb_writers#14){.+.+}-{0:0}, at: vfs_fallocate+0x434/0x5f4 fs/open.c:322
 #1: ffff0000f73509c8 (&sb->s_type->i_mutex_key#20){+.+.}-{3:3}, at: inode_lock include/linux/fs.h:758 [inline]
 #1: ffff0000f73509c8 (&sb->s_type->i_mutex_key#20){+.+.}-{3:3}, at: __ocfs2_change_file_space+0x184/0xc5c fs/ocfs2/file.c:1949
 #2: ffff0000f7350660 (&ocfs2_quota_ip_alloc_sem_key){++++}-{3:3}, at: __ocfs2_change_file_space+0x660/0xc5c fs/ocfs2/file.c:2015

stack backtrace:
CPU: 1 PID: 5370 Comm: syz.3.251 Not tainted syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/03/2025
Call trace:
 dump_backtrace+0x1c0/0x1ec 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:2048
 check_noncircular+0x264/0x2f8 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+0x2880/0x6800 kernel/locking/lockdep.c:5049
 lock_acquire+0x20c/0x63c kernel/locking/lockdep.c:5662
 down_write+0x5c/0x88 kernel/locking/rwsem.c:1573
 inode_lock include/linux/fs.h:758 [inline]
 ocfs2_remove_btree_range+0x514/0x1260 fs/ocfs2/alloc.c:5742
 ocfs2_remove_inode_range+0xb98/0x2390 fs/ocfs2/file.c:1907
 __ocfs2_change_file_space+0x71c/0xc5c fs/ocfs2/file.c:2028
 ocfs2_fallocate+0x1f0/0x224 fs/ocfs2/file.c:2138
 vfs_fallocate+0x4a4/0x5f4 fs/open.c:323
 ksys_fallocate fs/open.c:346 [inline]
 __do_sys_fallocate fs/open.c:354 [inline]
 __se_sys_fallocate fs/open.c:352 [inline]
 __arm64_sys_fallocate+0xc0/0x110 fs/open.c:352
 __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
 invoke_syscall+0x98/0x2b4 arch/arm64/kernel/syscall.c:52
 el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:140
 do_el0_svc+0x58/0x130 arch/arm64/kernel/syscall.c:204
 el0_svc+0x58/0x128 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:585

Crashes (1):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/01/29 20:10 linux-6.1.y cd9b81672742 aeb6fdd5 .config console log report info [disk image] [vmlinux] [kernel image] ci2-linux-6-1-kasan-arm64 possible deadlock in ocfs2_remove_btree_range
* Struck through repros no longer work on HEAD.