Commit 40ca39b5 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: btree_update_nodes_written() requires alloc reserve

Also, in the btree_update_start() path, if we already have a journal
pre-reservation we don't want to take another - that's a deadlock.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 8c9eef95
...@@ -529,6 +529,8 @@ static void btree_update_nodes_written(struct btree_update *as) ...@@ -529,6 +529,8 @@ static void btree_update_nodes_written(struct btree_update *as)
*/ */
ret = bch2_trans_do(c, &as->disk_res, &journal_seq, ret = bch2_trans_do(c, &as->disk_res, &journal_seq,
BTREE_INSERT_NOFAIL| BTREE_INSERT_NOFAIL|
BTREE_INSERT_USE_RESERVE|
BTREE_INSERT_USE_ALLOC_RESERVE|
BTREE_INSERT_NOCHECK_RW| BTREE_INSERT_NOCHECK_RW|
BTREE_INSERT_JOURNAL_RESERVED, BTREE_INSERT_JOURNAL_RESERVED,
btree_update_nodes_written_trans(&trans, as)); btree_update_nodes_written_trans(&trans, as));
...@@ -886,9 +888,10 @@ bch2_btree_update_start(struct btree_trans *trans, enum btree_id id, ...@@ -886,9 +888,10 @@ bch2_btree_update_start(struct btree_trans *trans, enum btree_id id,
bch2_keylist_init(&as->new_keys, as->_new_keys); bch2_keylist_init(&as->new_keys, as->_new_keys);
bch2_keylist_init(&as->parent_keys, as->inline_keys); bch2_keylist_init(&as->parent_keys, as->inline_keys);
ret = bch2_journal_preres_get(&c->journal, &as->journal_preres, if (!(flags & BTREE_INSERT_JOURNAL_RESERVED))
BTREE_UPDATE_JOURNAL_RES, ret = bch2_journal_preres_get(&c->journal, &as->journal_preres,
JOURNAL_RES_GET_NONBLOCK); BTREE_UPDATE_JOURNAL_RES,
JOURNAL_RES_GET_NONBLOCK);
if (ret == -EAGAIN) { if (ret == -EAGAIN) {
if (flags & BTREE_INSERT_NOUNLOCK) if (flags & BTREE_INSERT_NOUNLOCK)
return ERR_PTR(-EINTR); return ERR_PTR(-EINTR);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment