Hi, We get a possible kernel circular locking dependency with kernel version 6.12.22-android16-3-g03cf4641deee-4k. Lock approve log is as below: kswapd0: kswapd0: ====================================================== kswapd0: WARNING: possible circular locking dependency detected kswapd0: 6.12.22-android16-3-g03cf4641deee-4k #1 Tainted: G OE kswapd0: ------------------------------------------------------ kswapd0: kswapd0/95 is trying to acquire lock: ffffff801b6f5640 (sb_internal){.+.+}-{0:0}, at: f2fs_evict_inode+0x220/0x7d8 kswapd0: but task is already holding lock: ffffffd5c35d6070 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat+0xe8/0xe10 kswapd0: which lock already depends on the new lock. kswapd0: the existing dependency chain (in reverse order) is: kswapd0: -> #3 (fs_reclaim){+.+.}-{0:0}: kswapd0: fs_reclaim_acquire+0x5c/0xc4 kswapd0: blk_mq_alloc_and_init_hctx+0x318/0x440 kswapd0: blk_mq_realloc_hw_ctxs+0x70/0x480 kswapd0: blk_mq_init_allocated_queue+0x134/0x610 kswapd0: __blk_mq_alloc_disk+0xb4/0x164 kswapd0: loop_add+0x190/0x3ac kswapd0: loop_init+0xec/0x114 kswapd0: do_one_initcall+0x184/0x464 kswapd0: do_initcall_level+0xdc/0x1b0 kswapd0: do_initcalls+0x70/0xc0 kswapd0: do_basic_setup+0x1c/0x28 kswapd0: kernel_init_freeable+0x14c/0x1c8 kswapd0: kernel_init+0x20/0x1ac kswapd0: ret_from_fork+0x10/0x20 kswapd0: -> #2 (&q->sysfs_lock){+.+.}-{3:3}: kswapd0: __mutex_lock_common+0xe0/0x1944 kswapd0: mutex_lock_nested+0x2c/0x3c kswapd0: queue_attr_store+0x88/0xf0 kswapd0: sysfs_kf_write+0x98/0xc8 kswapd0: kernfs_fop_write_iter+0x12c/0x1d4 kswapd0: vfs_write+0x340/0x3ac kswapd0: ksys_write+0x78/0xe8 kswapd0: __arm64_sys_write+0x1c/0x2c kswapd0: invoke_syscall+0x58/0x10c kswapd0: el0_svc_common+0xa8/0xdc kswapd0: do_el0_svc+0x1c/0x28 kswapd0: el0_svc+0x50/0xac kswapd0: el0t_64_sync_handler+0x70/0xbc kswapd0: el0t_64_sync+0x1a8/0x1ac kswapd0: -> #1 (&q->q_usage_counter(io)#77){++++}-{0:0}: kswapd0: __submit_bio+0xdc/0x1a8 kswapd0: submit_bio_noacct_nocheck+0x1a4/0x390 kswapd0: submit_bio_noacct+0x308/0x49c kswapd0: submit_bio+0x158/0x174 kswapd0: f2fs_submit_read_bio+0x8c/0x134 kswapd0: f2fs_submit_page_bio+0x260/0x2b4 kswapd0: read_node_page+0xb8/0x190 kswapd0: __get_node_folio+0x90/0x4c0 kswapd0: truncate_dnode+0x40/0x28c kswapd0: f2fs_truncate_inode_blocks+0x35c/0x788 kswapd0: f2fs_do_truncate_blocks+0x268/0x9a4 kswapd0: f2fs_truncate_blocks+0x68/0x100 kswapd0: f2fs_truncate+0xbc/0x174 kswapd0: f2fs_evict_inode+0x298/0x7d8 kswapd0: evict+0x1e8/0x43c kswapd0: iput+0x274/0x2c0 kswapd0: do_unlinkat+0x1ac/0x2d0 kswapd0: __arm64_sys_unlinkat+0x4c/0x64 kswapd0: invoke_syscall+0x58/0x10c kswapd0: el0_svc_common+0xa8/0xdc kswapd0: do_el0_svc+0x1c/0x28 kswapd0: el0_svc+0x50/0xac kswapd0: el0t_64_sync_handler+0x70/0xbc kswapd0: el0t_64_sync+0x1a8/0x1ac kswapd0: -> #0 (sb_internal){.+.+}-{0:0}: kswapd0: __lock_acquire+0x18a8/0x3160 kswapd0: lock_acquire+0x134/0x2b0 kswapd0: sb_start_intwrite+0x58/0x150 kswapd0: f2fs_evict_inode+0x220/0x7d8 kswapd0: evict+0x1e8/0x43c kswapd0: iput+0x274/0x2c0 kswapd0: f2fs_evict_inode+0x70/0x7d8 kswapd0: evict+0x1e8/0x43c kswapd0: prune_icache_sb+0xa0/0x104 kswapd0: super_cache_scan+0x13c/0x1b0 kswapd0: do_shrink_slab+0x2e0/0x798 kswapd0: shrink_slab+0x224/0x894 kswapd0: shrink_one+0xb8/0x228 kswapd0: shrink_node+0xd78/0x1094 kswapd0: balance_pgdat+0x814/0xe10 kswapd0: kswapd+0x2fc/0x5a4 kswapd0: kthread+0x110/0x134 kswapd0: ret_from_fork+0x10/0x20 To further clarify the stack #3: 0xffffffc0807b77b0: might_alloc at kernel- 6.12/include/linux/sched/mm.h:318 (inlined by) xa_insert at kernel-6.12/include/linux/xarray.h:783 (inlined by) blk_mq_init_hctx at kernel-6.12/block/blk-mq.c:3943 (inlined by) blk_mq_alloc_and_init_hctx at kernel-6.12/block/blk- mq.c:4476 Best, Ed Tsai (蔡宗軒)