]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: Make sure allocation failure errors are logged
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 19 Dec 2023 23:08:19 +0000 (18:08 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Jan 2024 16:47:41 +0000 (11:47 -0500)
The previous patch fixed a bug in allocation path error handling, and it
would've been noticed sooner had it been logged properly.

Generally speaking, errors that shouldn't happen in normal operation and
are being returned up the stack should be logged: the write path was
already logging IO errors, but non IO errors were missed.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs.h
fs/bcachefs/btree_update_interior.c
fs/bcachefs/data_update.c
fs/bcachefs/io_misc.c
fs/bcachefs/io_write.c

index fe65dfea0780a184038b8ebfab7a4dea092bb363..53a2624176ab5fd9649101ed9da92b74e397fb30 100644 (file)
@@ -326,6 +326,12 @@ do {                                                                       \
                bch_err(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
 } while (0)
 
+#define bch_err_fn_ratelimited(_c, _ret)                               \
+do {                                                                   \
+       if (should_print_err(_ret))                                     \
+               bch_err_ratelimited(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
+} while (0)
+
 #define bch_err_msg(_c, _ret, _msg, ...)                               \
 do {                                                                   \
        if (should_print_err(_ret))                                     \
index 6350c661ce095ddc3a3ef7ca75b73cd107c68cff..f0e3f51e62ca08dff6c26b2de7dacad9d600b953 100644 (file)
@@ -1190,6 +1190,9 @@ bch2_btree_update_start(struct btree_trans *trans, struct btree_path *path,
        return as;
 err:
        bch2_btree_update_free(as, trans);
+       if (!bch2_err_matches(ret, ENOSPC) &&
+           !bch2_err_matches(ret, EROFS))
+               bch_err_fn_ratelimited(c, ret);
        return ERR_PTR(ret);
 }
 
index 632e8ed5bbda1c0711100197c3a8403618484da2..1e6d162753fb834602c8e203b39f2bc7d53c6654 100644 (file)
@@ -418,6 +418,8 @@ static void bch2_update_unwritten_extent(struct btree_trans *trans,
                        continue;
                }
 
+               bch_err_fn_ratelimited(c, ret);
+
                if (ret)
                        return;
 
index eab0c8c577856aca13b002646e15574272792d80..26fdc6f35f0436e9df5dd38db26c048aa7119c4a 100644 (file)
@@ -61,7 +61,7 @@ int bch2_extent_fallocate(struct btree_trans *trans,
                 */
                ret = bch2_disk_reservation_get(c, &disk_res, sectors, new_replicas, 0);
                if (unlikely(ret))
-                       goto err;
+                       goto err_noprint;
 
                bch2_bkey_buf_reassemble(&old, c, k);
        }
@@ -125,7 +125,12 @@ int bch2_extent_fallocate(struct btree_trans *trans,
 err:
        if (!ret && sectors_allocated)
                bch2_increment_clock(c, sectors_allocated, WRITE);
-
+       if (should_print_err(ret))
+               bch_err_inum_offset_ratelimited(c,
+                       inum.inum,
+                       iter->pos.offset << 9,
+                       "%s(): error: %s", __func__, bch2_err_str(ret));
+err_noprint:
        bch2_open_buckets_put(c, &open_buckets);
        bch2_disk_reservation_put(c, &disk_res);
        bch2_bkey_buf_exit(&new, c);
index 264d8fcef17684aee1e4ae16dcc9809a3407645d..2817f27909b314b3366657a476295ab682475057 100644 (file)
@@ -1463,6 +1463,10 @@ err:
                        op->flags |= BCH_WRITE_DONE;
 
                        if (ret < 0) {
+                               bch_err_inum_offset_ratelimited(c,
+                                       op->pos.inode,
+                                       op->pos.offset << 9,
+                                       "%s(): error: %s", __func__, bch2_err_str(ret));
                                op->error = ret;
                                break;
                        }