====================================================== WARNING: possible circular locking dependency detected 4.19.211-syzkaller #0 Not tainted ------------------------------------------------------ syz-executor.5/32155 is trying to acquire lock: 00000000a781881c ((wq_completion)"dio/%s"sb->s_id){+.+.}, at: flush_workqueue+0xe8/0x13e0 kernel/workqueue.c:2658 but task is already holding lock: 00000000ca4928f8 (&sb->s_type->i_mutex_key#23){++++}, at: inode_lock include/linux/fs.h:748 [inline] 00000000ca4928f8 (&sb->s_type->i_mutex_key#23){++++}, at: generic_file_write_iter+0x99/0x730 mm/filemap.c:3320 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (&sb->s_type->i_mutex_key#23){++++}: inode_lock include/linux/fs.h:748 [inline] __generic_file_fsync+0xb0/0x1f0 fs/libfs.c:989 fat_file_fsync+0x73/0x200 fs/fat/file.c:198 vfs_fsync_range+0x13a/0x220 fs/sync.c:197 generic_write_sync include/linux/fs.h:2750 [inline] dio_complete+0x763/0xac0 fs/direct-io.c:329 process_one_work+0x864/0x1570 kernel/workqueue.c:2153 worker_thread+0x64c/0x1130 kernel/workqueue.c:2296 kthread+0x33f/0x460 kernel/kthread.c:259 ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:415 -> #1 ((work_completion)(&dio->complete_work)){+.+.}: worker_thread+0x64c/0x1130 kernel/workqueue.c:2296 kthread+0x33f/0x460 kernel/kthread.c:259 ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:415 -> #0 ((wq_completion)"dio/%s"sb->s_id){+.+.}: flush_workqueue+0x117/0x13e0 kernel/workqueue.c:2661 drain_workqueue+0x1a5/0x460 kernel/workqueue.c:2826 destroy_workqueue+0x75/0x790 kernel/workqueue.c:4183 __alloc_workqueue_key+0xb76/0xed0 kernel/workqueue.c:4160 sb_init_dio_done_wq+0x34/0x90 fs/direct-io.c:623 do_blockdev_direct_IO fs/direct-io.c:1285 [inline] __blockdev_direct_IO+0x5f55/0xef40 fs/direct-io.c:1419 blockdev_direct_IO include/linux/fs.h:3059 [inline] fat_direct_IO+0x1d1/0x370 fs/fat/inode.c:282 generic_file_direct_write+0x208/0x4a0 mm/filemap.c:3073 __generic_file_write_iter+0x2d0/0x610 mm/filemap.c:3252 generic_file_write_iter+0x3f8/0x730 mm/filemap.c:3323 call_write_iter include/linux/fs.h:1821 [inline] aio_write+0x37f/0x5c0 fs/aio.c:1574 __io_submit_one fs/aio.c:1858 [inline] io_submit_one+0xecd/0x20c0 fs/aio.c:1909 __do_sys_io_submit fs/aio.c:1953 [inline] __se_sys_io_submit+0x11b/0x4a0 fs/aio.c:1924 do_syscall_64+0xf9/0x620 arch/x86/entry/common.c:293 entry_SYSCALL_64_after_hwframe+0x49/0xbe other info that might help us debug this: Chain exists of: (wq_completion)"dio/%s"sb->s_id --> (work_completion)(&dio->complete_work) --> &sb->s_type->i_mutex_key#23 Possible unsafe locking scenario: CPU0 CPU1 ---- ---- FAT-fs (loop2): Unrecognized mount option "" or missing value lock(&sb->s_type->i_mutex_key#23); lock((work_completion)(&dio->complete_work)); lock(&sb->s_type->i_mutex_key#23); lock((wq_completion)"dio/%s"sb->s_id); *** DEADLOCK *** 1 lock held by syz-executor.5/32155: #0: 00000000ca4928f8 (&sb->s_type->i_mutex_key#23){++++}, at: inode_lock include/linux/fs.h:748 [inline] #0: 00000000ca4928f8 (&sb->s_type->i_mutex_key#23){++++}, at: generic_file_write_iter+0x99/0x730 mm/filemap.c:3320 stack backtrace: CPU: 1 PID: 32155 Comm: syz-executor.5 Not tainted 4.19.211-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/26/2022 Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x1fc/0x2ef lib/dump_stack.c:118 print_circular_bug.constprop.0.cold+0x2d7/0x41e kernel/locking/lockdep.c:1222 check_prev_add kernel/locking/lockdep.c:1866 [inline] check_prevs_add kernel/locking/lockdep.c:1979 [inline] validate_chain kernel/locking/lockdep.c:2420 [inline] __lock_acquire+0x30c9/0x3ff0 kernel/locking/lockdep.c:3416 lock_acquire+0x170/0x3c0 kernel/locking/lockdep.c:3908 flush_workqueue+0x117/0x13e0 kernel/workqueue.c:2661 drain_workqueue+0x1a5/0x460 kernel/workqueue.c:2826 destroy_workqueue+0x75/0x790 kernel/workqueue.c:4183 __alloc_workqueue_key+0xb76/0xed0 kernel/workqueue.c:4160 sb_init_dio_done_wq+0x34/0x90 fs/direct-io.c:623 do_blockdev_direct_IO fs/direct-io.c:1285 [inline] __blockdev_direct_IO+0x5f55/0xef40 fs/direct-io.c:1419 blockdev_direct_IO include/linux/fs.h:3059 [inline] fat_direct_IO+0x1d1/0x370 fs/fat/inode.c:282 generic_file_direct_write+0x208/0x4a0 mm/filemap.c:3073 __generic_file_write_iter+0x2d0/0x610 mm/filemap.c:3252 generic_file_write_iter+0x3f8/0x730 mm/filemap.c:3323 call_write_iter include/linux/fs.h:1821 [inline] aio_write+0x37f/0x5c0 fs/aio.c:1574 __io_submit_one fs/aio.c:1858 [inline] io_submit_one+0xecd/0x20c0 fs/aio.c:1909 __do_sys_io_submit fs/aio.c:1953 [inline] __se_sys_io_submit+0x11b/0x4a0 fs/aio.c:1924 do_syscall_64+0xf9/0x620 arch/x86/entry/common.c:293 entry_SYSCALL_64_after_hwframe+0x49/0xbe RIP: 0033:0x7fea5c4703c9 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 b8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007fea5ade5168 EFLAGS: 00000246 ORIG_RAX: 00000000000000d1 RAX: ffffffffffffffda RBX: 00007fea5c582f80 RCX: 00007fea5c4703c9 RDX: 0000000020000540 RSI: 0000000000001801 RDI: 00007fea5c55e000 RBP: 00007fea5c4cb33f R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007fffea7e566f R14: 00007fea5ade5300 R15: 0000000000022000 block nbd3: Device being setup by another task hfsplus: unable to find HFS+ superblock batman_adv: Cannot find parent device block nbd3: Could not allocate knbd recv work queue. hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock device lo entered promiscuous mode hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock EXT4-fs (loop4): VFS: Can't find ext4 filesystem batman_adv: Cannot find parent device Y4`Ҙ: renamed from lo netlink: 44 bytes leftover after parsing attributes in process `syz-executor.1'. hfsplus: unable to find HFS+ superblock netlink: 44 bytes leftover after parsing attributes in process `syz-executor.1'. netlink: 44 bytes leftover after parsing attributes in process `syz-executor.1'. netlink: 44 bytes leftover after parsing attributes in process `syz-executor.1'. print_req_error: 88 callbacks suppressed print_req_error: I/O error, dev loop7, sector 768 print_req_error: I/O error, dev loop7, sector 0 buffer_io_error: 86 callbacks suppressed Buffer I/O error on dev loop7, logical block 0, lost async page write print_req_error: I/O error, dev loop7, sector 4 Buffer I/O error on dev loop7, logical block 1, lost async page write print_req_error: I/O error, dev loop7, sector 8 Buffer I/O error on dev loop7, logical block 2, lost async page write print_req_error: I/O error, dev loop7, sector 12 print_req_error: I/O error, dev loop7, sector 16 Buffer I/O error on dev loop7, logical block 4, lost async page write Buffer I/O error on dev loop7, logical block 3, lost async page write print_req_error: I/O error, dev loop7, sector 20 print_req_error: I/O error, dev loop7, sector 24 Buffer I/O error on dev loop7, logical block 5, lost async page write Buffer I/O error on dev loop7, logical block 6, lost async page write print_req_error: I/O error, dev loop7, sector 28 print_req_error: I/O error, dev loop7, sector 32 Buffer I/O error on dev loop7, logical block 7, lost async page write Buffer I/O error on dev loop7, logical block 8, lost async page write Buffer I/O error on dev loop7, logical block 9, lost async page write hfsplus: unable to find HFS+ superblock IPVS: ftp: loaded support on port[0] = 21 EXT4-fs (loop4): VFS: Can't find ext4 filesystem hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock IPVS: ftp: loaded support on port[0] = 21 hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock new mount options do not match the existing superblock, will be ignored hfsplus: unable to find HFS+ superblock new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored hfsplus: unable to find HFS+ superblock hfsplus: unable to find HFS+ superblock new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored hfsplus: unable to find HFS+ superblock new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored hfsplus: unable to find HFS+ superblock new mount options do not match the existing superblock, will be ignored hfsplus: unable to find HFS+ superblock new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored new mount options do not match the existing superblock, will be ignored