======================================================
WARNING: possible circular locking dependency detected
6.2.0-rc7-next-20230207 #1 Not tainted
------------------------------------------------------
syz-executor.4/9459 is trying to acquire lock:
ffff8880098323f8 (&journal->j_checkpoint_mutex){+.+.}-{3:3}, at: __jbd2_log_wait_for_space+0x238/0x4b0

but task is already holding lock:
ffff88801af097e0 (&sb->s_type->i_mutex_key#6){++++}-{3:3}, at: ext4_buffered_write_iter+0xb0/0x460

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (&sb->s_type->i_mutex_key#6){++++}-{3:3}:
       down_read+0x3d/0x50
       ext4_bmap+0x52/0x470
       bmap+0xb0/0x130
       jbd2_journal_bmap+0xac/0x1d0
       jbd2_journal_flush+0x87f/0xc90
       __ext4_ioctl+0x9fd/0x4330
       __x64_sys_ioctl+0x19e/0x210
       do_syscall_64+0x3f/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc

-> #0 (&journal->j_checkpoint_mutex){+.+.}-{3:3}:
       __lock_acquire+0x2da7/0x63b0
       lock_acquire.part.0+0xec/0x320
       mutex_lock_io_nested+0x149/0x1300
       __jbd2_log_wait_for_space+0x238/0x4b0
       add_transaction_credits+0xa42/0xb80
       start_this_handle+0x3a6/0x14d0
       jbd2__journal_start+0x394/0x6b0
       __ext4_journal_start_sb+0x4c2/0x6f0
       ext4_dirty_inode+0xa5/0x130
       __mark_inode_dirty+0x1aa/0xee0
       generic_update_time+0x21b/0x2b0
       file_modified_flags+0x2d4/0x330
       ext4_buffered_write_iter+0xf9/0x460
       ext4_file_write_iter+0x3ff/0x1930
       vfs_write+0x9b4/0xdc0
       ksys_write+0x12b/0x260
       do_syscall_64+0x3f/0x90
       entry_SYSCALL_64_after_hwframe+0x72/0xdc

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&sb->s_type->i_mutex_key#6);
                               lock(&journal->j_checkpoint_mutex);
                               lock(&sb->s_type->i_mutex_key#6);
  lock(&journal->j_checkpoint_mutex);

 *** DEADLOCK ***

3 locks held by syz-executor.4/9459:
 #0: ffff88800ede7768 (&f->f_pos_lock){+.+.}-{3:3}, at: __fdget_pos+0xeb/0x110
 #1: ffff88800cdb6438 (sb_writers#3){.+.+}-{0:0}, at: ksys_write+0x12b/0x260
 #2: ffff88801af097e0 (&sb->s_type->i_mutex_key#6){++++}-{3:3}, at: ext4_buffered_write_iter+0xb0/0x460

stack backtrace:
CPU: 0 PID: 9459 Comm: syz-executor.4 Not tainted 6.2.0-rc7-next-20230207 #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
Call Trace:
 <TASK>
 dump_stack_lvl+0x91/0xf0
 check_noncircular+0x263/0x2e0
 __lock_acquire+0x2da7/0x63b0
 lock_acquire.part.0+0xec/0x320
 mutex_lock_io_nested+0x149/0x1300
 __jbd2_log_wait_for_space+0x238/0x4b0
 add_transaction_credits+0xa42/0xb80
 start_this_handle+0x3a6/0x14d0
 jbd2__journal_start+0x394/0x6b0
 __ext4_journal_start_sb+0x4c2/0x6f0
 ext4_dirty_inode+0xa5/0x130
 __mark_inode_dirty+0x1aa/0xee0
 generic_update_time+0x21b/0x2b0
 file_modified_flags+0x2d4/0x330
 ext4_buffered_write_iter+0xf9/0x460
 ext4_file_write_iter+0x3ff/0x1930
 vfs_write+0x9b4/0xdc0
 ksys_write+0x12b/0x260
 do_syscall_64+0x3f/0x90
 entry_SYSCALL_64_after_hwframe+0x72/0xdc
RIP: 0033:0x7f3c33822b19
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:00007f3c30d98188 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 00007f3c33935f60 RCX: 00007f3c33822b19
RDX: 0000000000041030 RSI: 0000000020000080 RDI: 0000000000000005
RBP: 00007f3c3387cf6d R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007ffe07c395cf R14: 00007f3c30d98300 R15: 0000000000022000
 </TASK>
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode
device lo left promiscuous mode
device lo entered promiscuous mode