Kent Overstreet
6547ebabda
bcachefs: Don't call lock_graph_descend() with wait lock held
...
This fixes a deadlock:
01305 WARNING: possible circular locking dependency detected
01305 6.3.0-ktest-gf4de9bee61af #5305 Tainted: G W
01305 ------------------------------------------------------
01305 cat/14658 is trying to acquire lock:
01305 ffffffc00982f460 (fs_reclaim){+.+.}-{0:0}, at: __kmem_cache_alloc_node+0x48/0x278
01305
01305 but task is already holding lock:
01305 ffffff8011aaf040 (&lock->wait_lock){+.+.}-{2:2}, at: bch2_check_for_deadlock+0x4b8/0xa58
01305
01305 which lock already depends on the new lock.
01305
01305
01305 the existing dependency chain (in reverse order) is:
01305
01305 -> #2 (&lock->wait_lock){+.+.}-{2:2}:
01305 _raw_spin_lock+0x54/0x70
01305 __six_lock_wakeup+0x40/0x1b0
01305 six_unlock_ip+0xe8/0x248
01305 bch2_btree_key_cache_scan+0x720/0x940
01305 shrink_slab.constprop.0+0x284/0x770
01305 shrink_node+0x390/0x828
01305 balance_pgdat+0x390/0x6d0
01305 kswapd+0x2e4/0x718
01305 kthread+0x184/0x1a8
01305 ret_from_fork+0x10/0x20
01305
01305 -> #1 (&c->lock#2){+.+.}-{3:3}:
01305 __mutex_lock+0x104/0x14a0
01305 mutex_lock_nested+0x30/0x40
01305 bch2_btree_key_cache_scan+0x5c/0x940
01305 shrink_slab.constprop.0+0x284/0x770
01305 shrink_node+0x390/0x828
01305 balance_pgdat+0x390/0x6d0
01305 kswapd+0x2e4/0x718
01305 kthread+0x184/0x1a8
01305 ret_from_fork+0x10/0x20
01305
01305 -> #0 (fs_reclaim){+.+.}-{0:0}:
01305 __lock_acquire+0x19d0/0x2930
01305 lock_acquire+0x1dc/0x458
01305 fs_reclaim_acquire+0x9c/0xe0
01305 __kmem_cache_alloc_node+0x48/0x278
01305 __kmalloc_node_track_caller+0x5c/0x278
01305 krealloc+0x94/0x180
01305 bch2_printbuf_make_room.part.0+0xac/0x118
01305 bch2_prt_printf+0x150/0x1e8
01305 bch2_btree_bkey_cached_common_to_text+0x170/0x298
01305 bch2_btree_trans_to_text+0x244/0x348
01305 print_cycle+0x7c/0xb0
01305 break_cycle+0x254/0x528
01305 bch2_check_for_deadlock+0x59c/0xa58
01305 bch2_btree_deadlock_read+0x174/0x200
01305 full_proxy_read+0x94/0xf0
01305 vfs_read+0x15c/0x3a8
01305 ksys_read+0xb8/0x148
01305 __arm64_sys_read+0x48/0x60
01305 invoke_syscall.constprop.0+0x64/0x138
01305 do_el0_svc+0x84/0x138
01305 el0_svc+0x34/0x80
01305 el0t_64_sync_handler+0xb0/0xb8
01305 el0t_64_sync+0x14c/0x150
01305
01305 other info that might help us debug this:
01305
01305 Chain exists of:
01305 fs_reclaim --> &c->lock#2 --> &lock->wait_lock
01305
01305 Possible unsafe locking scenario:
01305
01305 CPU0 CPU1
01305 ---- ----
01305 lock(&lock->wait_lock);
01305 lock(&c->lock#2);
01305 lock(&lock->wait_lock);
01305 lock(fs_reclaim);
01305
01305 *** DEADLOCK ***
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-10-22 17:10:04 -04:00
..
2023-08-29 14:25:26 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 14:25:26 -07:00
2023-08-28 11:39:14 -07:00
2023-10-22 17:10:04 -04:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 14:25:26 -07:00
2023-08-29 14:25:26 -07:00
2023-09-06 12:10:15 -07:00
2023-08-28 09:31:32 -07:00
2023-07-13 10:28:05 +02:00
2023-08-28 11:04:18 -07:00
2023-09-01 09:53:54 -07:00
2023-08-28 10:17:14 -07:00
2023-08-25 10:31:39 -05:00
2023-08-28 10:17:14 -07:00
2023-07-13 10:28:06 +02:00
2023-08-29 20:21:42 -07:00
2023-08-29 14:25:26 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 17:45:22 -04:00
2023-08-30 12:10:50 -07:00
2023-08-31 15:18:15 -07:00
2023-09-02 15:37:59 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-09-05 12:45:55 -07:00
2023-09-05 13:00:28 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-07-24 10:30:00 +02:00
2023-08-29 20:21:42 -07:00
2023-08-29 14:25:26 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-08-31 15:18:15 -07:00
2023-07-24 10:30:01 +02:00
2023-08-31 15:25:01 -07:00
2023-09-01 09:43:18 -07:00
2023-08-29 17:45:22 -04:00
2023-08-29 20:21:42 -07:00
2023-08-31 15:36:41 -07:00
2023-08-31 15:32:18 -07:00
2023-08-29 20:21:42 -07:00
2023-08-31 12:07:34 -05:00
2023-07-10 14:36:12 +02:00
2023-08-29 20:21:42 -07:00
2023-09-07 10:23:37 -07:00
2023-08-31 15:18:15 -07:00
2023-08-29 20:21:42 -07:00
2023-07-24 10:30:03 +02:00
2023-08-11 09:04:57 +02:00
2023-08-30 11:54:09 -07:00
2023-09-05 10:56:27 -07:00
2023-09-02 10:45:17 -07:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-08-30 12:10:50 -07:00
2023-07-24 10:30:04 +02:00
2023-08-29 20:21:42 -07:00
2023-08-29 20:21:42 -07:00
2023-09-09 19:56:23 -07:00
2023-07-24 10:30:05 +02:00
2023-08-29 20:21:42 -07:00
2023-09-01 16:34:25 -07:00
2023-08-11 09:04:57 +02:00
2023-08-30 12:10:50 -07:00
2023-08-29 20:21:42 -07:00
2023-08-28 09:31:32 -07:00
2023-08-20 10:33:43 -07:00
2023-08-30 12:34:12 -07:00
2023-08-28 11:59:52 -07:00
2023-08-31 12:20:12 -07:00
2023-08-28 10:17:14 -07:00
2023-08-11 09:04:57 +02:00
2023-08-23 14:17:42 -07:00
2023-07-13 10:28:04 +02:00
2023-08-29 20:21:42 -07:00
2023-08-24 16:20:30 -07:00
2023-09-11 23:59:47 -04:00
2023-08-18 10:12:11 -07:00
2023-07-11 11:41:34 +02:00
2023-07-26 14:56:07 +02:00
2023-08-29 14:53:51 -07:00
2023-07-10 14:36:11 +02:00
2023-08-08 19:36:51 +02:00
2023-08-28 10:17:14 -07:00
2023-08-28 10:17:14 -07:00
2023-08-21 13:46:25 -07:00
2023-08-21 14:36:57 +02:00
2023-08-14 18:48:02 +02:00
2023-08-28 11:04:18 -07:00
2023-08-29 20:21:42 -07:00
2023-08-28 11:04:18 -07:00
2023-10-22 17:08:07 -04:00
2023-08-23 14:17:43 -07:00
2023-08-19 12:12:12 +02:00
2023-08-31 15:18:15 -07:00
2023-08-31 15:32:18 -07:00
2023-10-22 17:08:07 -04:00
2023-08-19 12:12:12 +02:00
2023-07-13 10:28:04 +02:00
2023-08-28 11:25:27 -07:00
2023-08-28 10:17:14 -07:00
2023-07-13 10:28:04 +02:00
2023-08-15 08:32:45 +02:00
2023-08-06 15:08:35 +02:00
2023-08-29 14:25:26 -07:00
2023-07-13 10:28:04 +02:00
2023-09-07 09:40:30 -07:00
2023-08-31 12:47:15 +02:00
2023-08-24 16:20:27 -07:00
2023-08-22 10:57:46 +02:00