]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_update_interior.c
Update bcachefs sources to 5b8c4a1366 bcachefs: bcachefs_metadata_version_deleted_inodes
[bcachefs-tools-debian] / libbcachefs / btree_update_interior.c
index 5592feff79d17760dc504155b7ca39c111c5fd39..f42ef46c59df6f423b524d4d0056e89af72f041b 100644 (file)
@@ -188,7 +188,7 @@ static void bch2_btree_node_free_inmem(struct btree_trans *trans,
        bch2_btree_node_hash_remove(&c->btree_cache, b);
        __btree_node_free(c, b);
        six_unlock_write(&b->c.lock);
-       mark_btree_node_locked_noreset(path, level, SIX_LOCK_intent);
+       mark_btree_node_locked_noreset(path, level, BTREE_NODE_INTENT_LOCKED);
 
        trans_for_each_path(trans, path)
                if (path->l[level].b == b) {
@@ -720,7 +720,7 @@ err:
 
                mutex_unlock(&c->btree_interior_update_lock);
 
-               mark_btree_node_locked_noreset(path, b->c.level, SIX_LOCK_intent);
+               mark_btree_node_locked_noreset(path, b->c.level, BTREE_NODE_INTENT_LOCKED);
                six_unlock_write(&b->c.lock);
 
                btree_node_write_if_need(c, b, SIX_LOCK_intent);
@@ -1158,6 +1158,17 @@ bch2_btree_update_start(struct btree_trans *trans, struct btree_path *path,
            bch2_err_matches(ret, ENOMEM)) {
                struct closure cl;
 
+               /*
+                * XXX: this should probably be a separate BTREE_INSERT_NONBLOCK
+                * flag
+                */
+               if (bch2_err_matches(ret, ENOSPC) &&
+                   (flags & BTREE_INSERT_JOURNAL_RECLAIM) &&
+                   watermark != BCH_WATERMARK_reclaim) {
+                       ret = -BCH_ERR_journal_reclaim_would_deadlock;
+                       goto err;
+               }
+
                closure_init_stack(&cl);
 
                do {