bcachefs: Fix error handling in promote path
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 29 May 2023 06:26:04 +0000 (02:26 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:03 +0000 (17:10 -0400)
The promote path had a BUG_ON() for unknown error type, which we're now
seeing: change it to a WARN_ON() - because we're curious what this is -
and otherwise handle it in the normal error path.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/io.c

index 0f8d52912c2d6d041b937799f55793be41dffb4e..199a8348355aa18d621b7dbbf9c9bf7e3c5760d6 100644 (file)
@@ -2057,14 +2057,16 @@ static struct promote_op *__promote_alloc(struct btree_trans *trans,
                                .write_flags    = BCH_WRITE_ALLOC_NOWAIT|BCH_WRITE_CACHED,
                        },
                        btree_id, k);
-       if (ret == -BCH_ERR_nocow_lock_blocked) {
+       if (ret) {
+               WARN_ONCE(ret != -BCH_ERR_nocow_lock_blocked,
+                         "%s: saw unknown error %s\n", __func__, bch2_err_str(ret));
+
                ret = rhashtable_remove_fast(&c->promote_table, &op->hash,
                                        bch_promote_params);
                BUG_ON(ret);
                goto err;
        }
 
-       BUG_ON(ret);
        op->write.op.end_io = promote_done;
 
        return op;