]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: BCH_ERR_data_read_buffer_too_small
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 8 Mar 2025 16:37:51 +0000 (11:37 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 16 Mar 2025 17:47:55 +0000 (13:47 -0400)
Now that the read path uses proper error codes, we can get rid of the
weird rbio->hole signalling to the move path that the read didn't
happen.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/errcode.h
fs/bcachefs/io_read.c
fs/bcachefs/io_read.h
fs/bcachefs/move.c

index 5050d978624b7443638fcafa263a751a4ca18c65..afa16d58041eb083fb6513379959c1a01341b3fd 100644 (file)
        x(BCH_ERR_data_read,            data_read_ptr_stale_race)               \
        x(BCH_ERR_data_read_retry,      data_read_ptr_stale_retry)              \
        x(BCH_ERR_data_read,            data_read_no_encryption_key)            \
+       x(BCH_ERR_data_read,            data_read_buffer_too_small)             \
+       x(BCH_ERR_data_read,            data_read_key_overwritten)              \
        x(BCH_ERR_btree_node_read_err,  btree_node_read_err_fixable)            \
        x(BCH_ERR_btree_node_read_err,  btree_node_read_err_want_retry)         \
        x(BCH_ERR_btree_node_read_err,  btree_node_read_err_must_retry)         \
index a7865f34ea3545c86a14670e0cd00724746f11f5..d1497af58180b2371a2b771ca49a33baf97ac7e2 100644 (file)
@@ -443,7 +443,7 @@ retry:
 
        if (!bkey_and_val_eq(k, bkey_i_to_s_c(u->k.k))) {
                /* extent we wanted to read no longer exists: */
-               rbio->hole = true;
+               rbio->ret = -BCH_ERR_data_read_key_overwritten;
                goto err;
        }
 
@@ -1000,10 +1000,10 @@ retry_pick:
                 */
                struct data_update *u = container_of(orig, struct data_update, rbio);
                if (pick.crc.compressed_size > u->op.wbio.bio.bi_iter.bi_size) {
-                       BUG();
                        if (ca)
                                percpu_ref_put(&ca->io_ref);
-                       goto hole;
+                       rbio->ret = -BCH_ERR_data_read_buffer_too_small;
+                       goto out_read_done;
                }
 
                iter.bi_size    = pick.crc.compressed_size << 9;
@@ -1083,7 +1083,6 @@ retry_pick:
        rbio->flags             = flags;
        rbio->have_ioref        = ca != NULL;
        rbio->narrow_crcs       = narrow_crcs;
-       rbio->hole              = 0;
        rbio->ret               = 0;
        rbio->context           = 0;
        rbio->pick              = pick;
@@ -1215,7 +1214,7 @@ hole:
         * to read no longer exists we have to signal that:
         */
        if (flags & BCH_READ_data_update)
-               orig->hole = true;
+               orig->ret = -BCH_ERR_data_read_key_overwritten;
 
        zero_fill_bio_iter(&orig->bio, iter);
 out_read_done:
index 1eb01e9847d75f049e51db091a74617e92fc6d2f..924406558f78140dc7b88330d6fe7605660f2c32 100644 (file)
@@ -40,7 +40,6 @@ struct bch_read_bio {
                                split:1,
                                have_ioref:1,
                                narrow_crcs:1,
-                               hole:1,
                                saw_error:1,
                                context:2;
        };
index f86fb8ad636a82ebc4b618e8c21aa351c1da5d7a..307b918fa2e7ac4a99de4855250120156ae4c27a 100644 (file)
@@ -125,8 +125,8 @@ static void move_write(struct moving_io *io)
                                     &ctxt->stats->sectors_error_corrected);
        }
 
-       if (unlikely(io->write.rbio.bio.bi_status ||
-                    io->write.rbio.hole ||
+       if (unlikely(io->write.rbio.ret ||
+                    io->write.rbio.bio.bi_status ||
                     io->write.data_opts.scrub)) {
                move_free(io);
                return;