mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 07:04:44 +00:00
bcachefs: Ensure bch2_trans_get_iter() returns iters with correct locks
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
c8b18c37b2
commit
1904a65a31
1 changed files with 7 additions and 1 deletions
|
@ -86,7 +86,7 @@ void __bch2_btree_node_lock_write(struct btree *b, struct btree_iter *iter)
|
|||
struct btree_iter *linked;
|
||||
unsigned readers = 0;
|
||||
|
||||
EBUG_ON(btree_node_read_locked(iter, b->c.level));
|
||||
EBUG_ON(!btree_node_intent_locked(iter, b->c.level));
|
||||
|
||||
trans_for_each_iter(iter->trans, linked)
|
||||
if (linked->l[b->c.level].b == b &&
|
||||
|
@ -1779,6 +1779,12 @@ static struct btree_iter *__btree_trans_get_iter(struct btree_trans *trans,
|
|||
|
||||
iter->flags &= ~(BTREE_ITER_INTENT|BTREE_ITER_PREFETCH);
|
||||
iter->flags |= flags & (BTREE_ITER_INTENT|BTREE_ITER_PREFETCH);
|
||||
|
||||
if ((iter->flags & BTREE_ITER_INTENT) &&
|
||||
!bch2_btree_iter_upgrade(iter, 1)) {
|
||||
trace_trans_restart_upgrade(trans->ip);
|
||||
return ERR_PTR(-EINTR);
|
||||
}
|
||||
}
|
||||
|
||||
BUG_ON(iter->btree_id != btree_id);
|
||||
|
|
Loading…
Reference in a new issue