====================================================== WARNING: possible circular locking dependency detected 6.2.0-rc3-next-20230112 #1 Not tainted ------------------------------------------------------ syz-executor.4/43749 is trying to acquire lock: ffff88800fd28170 (&journal->j_barrier){+.+.}-{3:3}, at: jbd2_journal_lock_updates+0x162/0x310 but task is already holding lock: ffff88800b266b90 (&sbi->s_writepages_rwsem){++++}-{0:0}, at: ext4_change_inode_journal_flag+0x17f/0x550 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #3 (&sbi->s_writepages_rwsem){++++}-{0:0}: ext4_writepages+0x1a9/0x5f0 do_writepages+0x1ad/0x650 filemap_fdatawrite_wbc+0x14b/0x1b0 __filemap_fdatawrite_range+0xba/0x100 filemap_write_and_wait_range+0xa5/0x130 __iomap_dio_rw+0x5ea/0x1bf0 iomap_dio_rw+0x40/0xa0 ext4_file_read_iter+0x2f4/0x4a0 do_iter_readv_writev+0x2f0/0x3c0 do_iter_read+0x2fb/0x750 vfs_readv+0xe5/0x160 do_readv+0x133/0x300 do_syscall_64+0x3f/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc -> #2 (&sb->s_type->i_mutex_key#6){++++}-{3:3}: down_read+0x9c/0x450 ext4_bmap+0x52/0x470 bmap+0xb0/0x130 jbd2_journal_bmap+0xac/0x190 jbd2_journal_flush+0x860/0xc10 __ext4_ioctl+0x9e3/0x43e0 __x64_sys_ioctl+0x19e/0x210 do_syscall_64+0x3f/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc -> #1 (&journal->j_checkpoint_mutex){+.+.}-{3:3}: mutex_lock_io_nested+0x14c/0x1330 jbd2_journal_flush+0x19e/0xc10 __ext4_ioctl+0x9e3/0x43e0 __x64_sys_ioctl+0x19e/0x210 do_syscall_64+0x3f/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc -> #0 (&journal->j_barrier){+.+.}-{3:3}: __lock_acquire+0x2999/0x5e00 lock_acquire.part.0+0x11e/0x340 __mutex_lock+0x136/0x14e0 jbd2_journal_lock_updates+0x162/0x310 ext4_change_inode_journal_flag+0x187/0x550 ext4_fileattr_set+0x14fa/0x19f0 vfs_fileattr_set+0x7a2/0xbd0 do_vfs_ioctl+0xfa6/0x15d0 __x64_sys_ioctl+0x110/0x210 do_syscall_64+0x3f/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc other info that might help us debug this: Chain exists of: &journal->j_barrier --> &sb->s_type->i_mutex_key#6 --> &sbi->s_writepages_rwsem Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&sbi->s_writepages_rwsem); lock(&sb->s_type->i_mutex_key#6); lock(&sbi->s_writepages_rwsem); lock(&journal->j_barrier); *** DEADLOCK *** 4 locks held by syz-executor.4/43749: #0: ffff88800b264438 (sb_writers#3){.+.+}-{0:0}, at: do_vfs_ioctl+0xf6b/0x15d0 #1: ffff8880439335b0 (&type->i_mutex_dir_key#3){++++}-{3:3}, at: vfs_fileattr_set+0x14c/0xbd0 #2: ffff888043933750 (mapping.invalidate_lock){++++}-{3:3}, at: ext4_change_inode_journal_flag+0x126/0x550 #3: ffff88800b266b90 (&sbi->s_writepages_rwsem){++++}-{0:0}, at: ext4_change_inode_journal_flag+0x17f/0x550 stack backtrace: CPU: 0 PID: 43749 Comm: syz-executor.4 Not tainted 6.2.0-rc3-next-20230112 #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 Call Trace: dump_stack_lvl+0x8f/0xb7 check_noncircular+0x263/0x2e0 __lock_acquire+0x2999/0x5e00 lock_acquire.part.0+0x11e/0x340 __mutex_lock+0x136/0x14e0 jbd2_journal_lock_updates+0x162/0x310 ext4_change_inode_journal_flag+0x187/0x550 ext4_fileattr_set+0x14fa/0x19f0 vfs_fileattr_set+0x7a2/0xbd0 do_vfs_ioctl+0xfa6/0x15d0 __x64_sys_ioctl+0x110/0x210 do_syscall_64+0x3f/0x90 entry_SYSCALL_64_after_hwframe+0x72/0xdc RIP: 0033:0x7ff805805b19 Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 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 bc ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007ff802d7b188 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 RAX: ffffffffffffffda RBX: 00007ff805918f60 RCX: 00007ff805805b19 RDX: 0000000020000040 RSI: 0000000040086602 RDI: 0000000000000003 RBP: 00007ff80585ff6d R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007ffc88eca78f R14: 00007ff802d7b300 R15: 0000000000022000 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1193/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1017/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1194/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1018/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1195/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1196/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1019/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1197/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1020/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1198/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1021/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1199/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1022/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1200/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1023/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1201/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1024/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1202/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1203/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1025/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1026/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1204/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1205/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1027/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1028/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1206/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1029/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1207/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1030/file0 supports timestamps until 2038 (0x7fffffff) Process accounting resumed ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1208/file0 supports timestamps until 2038 (0x7fffffff) Process accounting resumed Process accounting resumed Process accounting resumed Process accounting resumed Process accounting resumed Process accounting resumed Process accounting resumed Process accounting resumed loop1: detected capacity change from 0 to 640 loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1213/file0 supports timestamps until 2038 (0x7fffffff) Process accounting resumed ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1033/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1214/file0 supports timestamps until 2038 (0x7fffffff) Process accounting resumed loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1034/file0 supports timestamps until 2038 (0x7fffffff) ieee80211 phy87: Selected rate control algorithm 'minstrel_ht' loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1215/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1035/file0 supports timestamps until 2038 (0x7fffffff) ieee80211 phy88: Selected rate control algorithm 'minstrel_ht' ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1216/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1036/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1037/file0 supports timestamps until 2038 (0x7fffffff) ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1219/file0 supports timestamps until 2038 (0x7fffffff) loop1: detected capacity change from 0 to 640 ext4 filesystem being mounted at /syzkaller-testdir261046955/syzkaller.STBHbG/1220/file0 supports timestamps until 2038 (0x7fffffff) loop2: detected capacity change from 0 to 264192 ieee80211 phy89: Selected rate control algorithm 'minstrel_ht' ext4 filesystem being mounted at /syzkaller-testdir559824765/syzkaller.NkHlLl/1040/file0 supports timestamps until 2038 (0x7fffffff)