syzbot
possible deadlock in ocfs2_reflink
Status:
upstream: reported on 2026/07/30 00:10
Subsystems:
ocfs2
Labels:
prio:high
[Documentation on labels]
Reported-by: syzbot+e42eae29bba35810f43c@syzkaller.appspotmail.com
First crash: 52d, last: 21d
Sample crash report:
JBD2: Ignoring recovery information on journal
ocfs2: Mounting device (7,2) on (node local, slot 0) with ordered data mode.
======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Tainted: G L
------------------------------------------------------
syz.2.928/9621 is trying to acquire lock:
ffff88807669a258 (&oi->ip_alloc_sem){++++}-{4:4}, at: ocfs2_reflink+0x4d2/0x920 fs/ocfs2/refcounttree.c:4272
but task is already holding lock:
ffff88807669a2e8 (&oi->ip_xattr_sem){++++}-{4:4}, at: ocfs2_reflink+0x4c3/0x920 fs/ocfs2/refcounttree.c:4271
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #3 (&oi->ip_xattr_sem){++++}-{4:4}:
down_read+0x4a/0x330 kernel/locking/rwsem.c:1574
ocfs2_init_acl+0x2fd/0x7e0 fs/ocfs2/acl.c:367
ocfs2_mknod+0x166a/0x2240 fs/ocfs2/namei.c:414
ocfs2_create+0x195/0x460 fs/ocfs2/namei.c:677
lookup_open fs/namei.c:4508 [inline]
open_last_lookups fs/namei.c:4608 [inline]
path_openat+0x133a/0x3830 fs/namei.c:4860
do_file_open+0x23e/0x4a0 fs/namei.c:4892
do_sys_openat2+0x115/0x200 fs/open.c:1368
do_sys_open fs/open.c:1374 [inline]
__do_sys_creat fs/open.c:1452 [inline]
__se_sys_creat fs/open.c:1446 [inline]
__x64_sys_creat+0x8f/0xc0 fs/open.c:1446
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
-> #2 (&journal->j_trans_barrier){.+.+}-{4:4}:
down_read+0x4a/0x330 kernel/locking/rwsem.c:1574
ocfs2_start_trans+0x3ab/0x700 fs/ocfs2/journal.c:369
ocfs2_mknod+0x116a/0x2240 fs/ocfs2/namei.c:365
ocfs2_create+0x195/0x460 fs/ocfs2/namei.c:677
lookup_open fs/namei.c:4508 [inline]
open_last_lookups fs/namei.c:4608 [inline]
path_openat+0x133a/0x3830 fs/namei.c:4860
do_file_open+0x23e/0x4a0 fs/namei.c:4892
do_sys_openat2+0x115/0x200 fs/open.c:1368
do_sys_open fs/open.c:1374 [inline]
__do_sys_openat fs/open.c:1390 [inline]
__se_sys_openat fs/open.c:1385 [inline]
__x64_sys_openat+0x138/0x170 fs/open.c:1385
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
-> #1 (sb_internal#2){.+.+}-{0:0}:
__lock_release kernel/locking/lockdep.c:5574 [inline]
lock_release+0x199/0x3c0 kernel/locking/lockdep.c:5889
up_write+0x2d/0x4a0 kernel/locking/rwsem.c:1687
inode_unlock include/linux/fs.h:1034 [inline]
ocfs2_free_ac_resource fs/ocfs2/suballoc.c:131 [inline]
ocfs2_free_alloc_context+0x97/0x1a0 fs/ocfs2/suballoc.c:145
ocfs2_write_begin_nolock+0x4164/0x41f0 fs/ocfs2/aops.c:1805
ocfs2_write_begin+0x1ba/0x310 fs/ocfs2/aops.c:1885
generic_perform_write+0x2d5/0x8f0 mm/filemap.c:4364
ocfs2_file_write_iter+0x1706/0x1f10 fs/ocfs2/file.c:2481
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x612/0xba0 fs/read_write.c:687
ksys_pwrite64 fs/read_write.c:794 [inline]
__do_sys_pwrite64 fs/read_write.c:802 [inline]
__se_sys_pwrite64 fs/read_write.c:799 [inline]
__x64_sys_pwrite64+0x196/0x220 fs/read_write.c:799
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
-> #0 (&oi->ip_alloc_sem){++++}-{4:4}:
check_prev_add kernel/locking/lockdep.c:3165 [inline]
check_prevs_add kernel/locking/lockdep.c:3284 [inline]
validate_chain kernel/locking/lockdep.c:3908 [inline]
__lock_acquire+0x1520/0x2cf0 kernel/locking/lockdep.c:5237
lock_acquire+0x106/0x350 kernel/locking/lockdep.c:5868
down_write+0x96/0x200 kernel/locking/rwsem.c:1631
ocfs2_reflink+0x4d2/0x920 fs/ocfs2/refcounttree.c:4272
ocfs2_vfs_reflink+0x338/0x450 fs/ocfs2/refcounttree.c:4399
ocfs2_reflink_ioctl+0x3a0/0x450 fs/ocfs2/refcounttree.c:4439
ocfs2_ioctl+0x5b5/0x7e0 fs/ocfs2/ioctl.c:920
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:597 [inline]
__se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
other info that might help us debug this:
Chain exists of:
&oi->ip_alloc_sem --> &journal->j_trans_barrier --> &oi->ip_xattr_sem
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&oi->ip_xattr_sem);
lock(&journal->j_trans_barrier);
lock(&oi->ip_xattr_sem);
lock(&oi->ip_alloc_sem);
*** DEADLOCK ***
4 locks held by syz.2.928/9621:
#0: ffff88807a396450 (sb_writers#13){.+.+}-{0:0}, at: mnt_want_write+0x41/0x90 fs/namespace.c:494
#1: ffff8880766979a0 (&type->i_mutex_dir_key#8/1){+.+.}-{4:4}, at: inode_lock_nested include/linux/fs.h:1069 [inline]
#1: ffff8880766979a0 (&type->i_mutex_dir_key#8/1){+.+.}-{4:4}, at: __start_dirop fs/namei.c:2918 [inline]
#1: ffff8880766979a0 (&type->i_mutex_dir_key#8/1){+.+.}-{4:4}, at: start_dirop fs/namei.c:2942 [inline]
#1: ffff8880766979a0 (&type->i_mutex_dir_key#8/1){+.+.}-{4:4}, at: filename_create+0x200/0x370 fs/namei.c:4955
#2: ffff88807669a5a0 (&sb->s_type->i_mutex_key#25){+.+.}-{4:4}, at: inode_lock include/linux/fs.h:1024 [inline]
#2: ffff88807669a5a0 (&sb->s_type->i_mutex_key#25){+.+.}-{4:4}, at: ocfs2_vfs_reflink+0x2f8/0x450 fs/ocfs2/refcounttree.c:4396
#3: ffff88807669a2e8 (&oi->ip_xattr_sem){++++}-{4:4}, at: ocfs2_reflink+0x4c3/0x920 fs/ocfs2/refcounttree.c:4271
stack backtrace:
CPU: 0 UID: 0 PID: 9621 Comm: syz.2.928 Tainted: G L syzkaller #0 PREEMPT(full)
Tainted: [L]=SOFTLOCKUP
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/16/2026
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
print_circular_bug+0x2e1/0x300 kernel/locking/lockdep.c:2043
check_noncircular+0x12e/0x150 kernel/locking/lockdep.c:2175
check_prev_add kernel/locking/lockdep.c:3165 [inline]
check_prevs_add kernel/locking/lockdep.c:3284 [inline]
validate_chain kernel/locking/lockdep.c:3908 [inline]
__lock_acquire+0x1520/0x2cf0 kernel/locking/lockdep.c:5237
lock_acquire+0x106/0x350 kernel/locking/lockdep.c:5868
down_write+0x96/0x200 kernel/locking/rwsem.c:1631
ocfs2_reflink+0x4d2/0x920 fs/ocfs2/refcounttree.c:4272
ocfs2_vfs_reflink+0x338/0x450 fs/ocfs2/refcounttree.c:4399
ocfs2_reflink_ioctl+0x3a0/0x450 fs/ocfs2/refcounttree.c:4439
ocfs2_ioctl+0x5b5/0x7e0 fs/ocfs2/ioctl.c:920
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:597 [inline]
__se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fdee2d9e0d9
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007fdee3c5d028 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007fdee3025fa0 RCX: 00007fdee2d9e0d9
RDX: 0000200000000200 RSI: 0000000040186f04 RDI: 0000000000000004
RBP: 00007fdee2e35024 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007fdee3026038 R14: 00007fdee3025fa0 R15: 00007ffc8a9925b8
</TASK>
OCFS2: ERROR (device loop2): int ocfs2_validate_gd_self(struct super_block *, struct buffer_head *, int): Group descriptor #20 has bad signature
On-disk corruption discovered. Please run fsck.ocfs2 once the filesystem is unmounted.
OCFS2: File system is now read-only.
(syz.2.928,9621,1):ocfs2_search_chain:1935 ERROR: status = -30
(syz.2.928,9621,1):ocfs2_search_chain:2058 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_claim_suballoc_bits:2145 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_claim_suballoc_bits:2198 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_claim_metadata:2223 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_claim_metadata:2236 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_create_refcount_tree:595 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_attach_refcount_tree:3781 ERROR: status = -30
(syz.2.928,9621,0):__ocfs2_reflink:4170 ERROR: status = -30
(syz.2.928,9621,0):ocfs2_reflink:4283 ERROR: status = -30
* Struck through repros no longer work on HEAD.