bcachefs: Add error message for some allocation failures
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 23 Feb 2021 20:16:41 +0000 (15:16 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:53 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_background.c
fs/bcachefs/btree_gc.c
fs/bcachefs/journal_reclaim.c
fs/bcachefs/movinggc.c
fs/bcachefs/rebalance.c
fs/bcachefs/recovery.c

index aadd878b357d79df36a1dabeccdb0005cd04cf9c..eac82c9880bae9b1340ee3d95a4bf0e57e0fce00 100644 (file)
@@ -1387,8 +1387,11 @@ int bch2_dev_allocator_start(struct bch_dev *ca)
 
        p = kthread_create(bch2_allocator_thread, ca,
                           "bch-alloc/%s", ca->name);
-       if (IS_ERR(p))
+       if (IS_ERR(p)) {
+               bch_err(ca->fs, "error creating allocator thread: %li",
+                       PTR_ERR(p));
                return PTR_ERR(p);
+       }
 
        get_task_struct(p);
        rcu_assign_pointer(ca->alloc_thread, p);
index f687cc3bfa945cfa5a472865bae57516dfb6cd69..426c932098da541b0fd04ac20f93da605da81aa3 100644 (file)
@@ -115,8 +115,10 @@ static int bch2_gc_check_topology(struct bch_fs *c,
                }
 
                new = kmalloc(bkey_bytes(&cur.k->k), GFP_KERNEL);
-               if (!new)
+               if (!new) {
+                       bch_err(c, "%s: error allocating new key", __func__);
                        return -ENOMEM;
+               }
 
                bkey_copy(new, cur.k);
 
@@ -235,8 +237,10 @@ static int bch2_check_fix_ptrs(struct bch_fs *c, enum btree_id btree_id,
                }
 
                new = kmalloc(bkey_bytes(k->k), GFP_KERNEL);
-               if (!new)
+               if (!new) {
+                       bch_err(c, "%s: error allocating new key", __func__);
                        return -ENOMEM;
+               }
 
                bkey_reassemble(new, *k);
 
@@ -302,8 +306,10 @@ static int bch2_gc_mark_key(struct bch_fs *c, enum btree_id btree_id,
                                "superblock not marked as containing replicas (type %u)",
                                k.k->type)) {
                        ret = bch2_mark_bkey_replicas(c, k);
-                       if (ret)
-                               return ret;
+                       if (ret) {
+                               bch_err(c, "error marking bkey replicas: %i", ret);
+                               goto err;
+                       }
                }
 
                ret = bch2_check_fix_ptrs(c, btree_id, level, is_root, &k);
@@ -321,6 +327,9 @@ static int bch2_gc_mark_key(struct bch_fs *c, enum btree_id btree_id,
 
        bch2_mark_key(c, k, 0, k.k->size, NULL, 0, flags);
 fsck_err:
+err:
+       if (ret)
+               bch_err(c, "%s: ret %i", __func__, ret);
        return ret;
 }
 
@@ -448,8 +457,10 @@ static int bch2_gc_btree_init_recurse(struct bch_fs *c, struct btree *b,
 
                ret = bch2_gc_mark_key(c, b->c.btree_id, b->c.level, false,
                                       k, &max_stale, true);
-               if (ret)
+               if (ret) {
+                       bch_err(c, "%s: error %i from bch2_gc_mark_key", __func__, ret);
                        break;
+               }
 
                if (b->c.level) {
                        bch2_bkey_buf_reassemble(&cur, c, k);
@@ -493,8 +504,11 @@ static int bch2_gc_btree_init_recurse(struct bch_fs *c, struct btree *b,
                                continue;
                        }
 
-                       if (ret)
+                       if (ret) {
+                               bch_err(c, "%s: error %i getting btree node",
+                                       __func__, ret);
                                break;
+                       }
 
                        ret = bch2_gc_btree_init_recurse(c, child,
                                                         target_depth);
@@ -551,6 +565,8 @@ static int bch2_gc_btree_init(struct bch_fs *c,
 fsck_err:
        six_unlock_read(&b->c.lock);
 
+       if (ret)
+               bch_err(c, "%s: ret %i", __func__, ret);
        return ret;
 }
 
@@ -574,8 +590,10 @@ static int bch2_gc_btrees(struct bch_fs *c, bool initial)
                int ret = initial
                        ? bch2_gc_btree_init(c, id)
                        : bch2_gc_btree(c, id, initial);
-               if (ret)
+               if (ret) {
+                       bch_err(c, "%s: ret %i", __func__, ret);
                        return ret;
+               }
        }
 
        return 0;
@@ -881,6 +899,8 @@ static int bch2_gc_done(struct bch_fs *c,
 #undef copy_stripe_field
 #undef copy_field
 fsck_err:
+       if (ret)
+               bch_err(c, "%s: ret %i", __func__, ret);
        return ret;
 }
 
@@ -1601,8 +1621,10 @@ int bch2_gc_thread_start(struct bch_fs *c)
        BUG_ON(c->gc_thread);
 
        p = kthread_create(bch2_gc_thread, c, "bch-gc/%s", c->name);
-       if (IS_ERR(p))
+       if (IS_ERR(p)) {
+               bch_err(c, "error creating gc thread: %li", PTR_ERR(p));
                return PTR_ERR(p);
+       }
 
        get_task_struct(p);
        c->gc_thread = p;
index 1141b7d3a06053f278fc53573167676fc9575909..0a16343fb51a2d1be37b233fea7664edc103b30a 100644 (file)
@@ -691,8 +691,10 @@ int bch2_journal_reclaim_start(struct journal *j)
 
        p = kthread_create(bch2_journal_reclaim_thread, j,
                           "bch-reclaim/%s", c->name);
-       if (IS_ERR(p))
+       if (IS_ERR(p)) {
+               bch_err(c, "error creating journal reclaim thread: %li", PTR_ERR(p));
                return PTR_ERR(p);
+       }
 
        get_task_struct(p);
        j->reclaim_thread = p;
index e2472c19beafa44199813c94f98718714da26a72..b61bbc18a0aae324348bd524ba8838fe0f266e78 100644 (file)
@@ -348,8 +348,10 @@ int bch2_copygc_start(struct bch_fs *c)
                return -ENOMEM;
 
        t = kthread_create(bch2_copygc_thread, c, "bch-copygc/%s", c->name);
-       if (IS_ERR(t))
+       if (IS_ERR(t)) {
+               bch_err(c, "error creating copygc thread: %li", PTR_ERR(t));
                return PTR_ERR(t);
+       }
 
        get_task_struct(t);
 
index 2263ee41c44478c1671344b21f73f0bee3f7d126..c75411af4622fbec8bacad9a158c7949573a4800 100644 (file)
@@ -315,8 +315,10 @@ int bch2_rebalance_start(struct bch_fs *c)
                return 0;
 
        p = kthread_create(bch2_rebalance_thread, c, "bch-rebalance/%s", c->name);
-       if (IS_ERR(p))
+       if (IS_ERR(p)) {
+               bch_err(c, "error creating rebalance thread: %li", PTR_ERR(p));
                return PTR_ERR(p);
+       }
 
        get_task_struct(p);
        rcu_assign_pointer(c->rebalance.thread, p);
index 54ac9cc470af76a86d394cdc1a99d8f1bea8a86f..0aeaaadbf3f80bd6b042bba2d8936457eae77090 100644 (file)
@@ -122,8 +122,11 @@ int bch2_journal_key_insert(struct bch_fs *c, enum btree_id id,
                };
 
                new_keys.d = kvmalloc(sizeof(new_keys.d[0]) * new_keys.size, GFP_KERNEL);
-               if (!new_keys.d)
+               if (!new_keys.d) {
+                       bch_err(c, "%s: error allocating new key array (size %zu)",
+                               __func__, new_keys.size);
                        return -ENOMEM;
+               }
 
                memcpy(new_keys.d, keys->d, sizeof(keys->d[0]) * keys->nr);
                kvfree(keys->d);
@@ -145,8 +148,10 @@ int bch2_journal_key_delete(struct bch_fs *c, enum btree_id id,
                kmalloc(sizeof(struct bkey), GFP_KERNEL);
        int ret;
 
-       if (!whiteout)
+       if (!whiteout) {
+               bch_err(c, "%s: error allocating new key", __func__);
                return -ENOMEM;
+       }
 
        bkey_init(&whiteout->k);
        whiteout->k.p = pos;
@@ -1330,8 +1335,10 @@ int bch2_fs_initialize(struct bch_fs *c)
                                  &lostfound,
                                  0, 0, S_IFDIR|0700, 0,
                                  NULL, NULL));
-       if (ret)
+       if (ret) {
+               bch_err(c, "error creating lost+found");
                goto err;
+       }
 
        if (enabled_qtypes(c)) {
                ret = bch2_fs_quota_read(c);