diff options
author | Alan Huang <mmpgouride@gmail.com> | 2024-10-10 21:21:50 +0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-01-14 10:45:08 -0500 |
commit | 0ef9ab34f442f7236b5a84a6691959c67639f8b9 (patch) | |
tree | 0f1c6b8c1b61af6a4de292e83517ce92837bf09e | |
parent | cdc419dbf286eeaabb361d5cf5cee2cb566b6f5f (diff) |
bcachefs: Do not allow no fail lock request to fail
If the transaction chose itself as a victim before and restarted, it
might request a no fail lock request this time. But it might be added to
others' lock graph and be chose as the victim again, it's no longer safe
without additional check. We can also convert the cycle detector to be
fully RCU-based to solve that unsoundness, but the latency added to trans_put
and additional memory required may not worth it.
Signed-off-by: Alan Huang <mmpgouride@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_locking.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index c1a0f8f78eb4..771d531d6533 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -281,7 +281,7 @@ int bch2_check_for_deadlock(struct btree_trans *trans, struct printbuf *cycle) g.nr = 0; - if (trans->lock_must_abort) { + if (trans->lock_must_abort && !trans->lock_may_not_fail) { if (cycle) return -1; |