bcachefs: BCH_ERR_data_read_buffer_too_small

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>
This commit is contained in:
Kent Overstreet 2025-03-08 11:37:51 -05:00
parent f4b84bac20
commit 881b598ef1
4 changed files with 8 additions and 8 deletions

View File

@ -295,6 +295,8 @@
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) \

View File

@ -443,7 +443,7 @@ static noinline void bch2_read_retry_nodecode(struct bch_fs *c, struct bch_read_
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 @@ int __bch2_read_extent(struct btree_trans *trans, struct bch_read_bio *orig,
*/
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 @@ int __bch2_read_extent(struct btree_trans *trans, struct bch_read_bio *orig,
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 @@ int __bch2_read_extent(struct btree_trans *trans, struct bch_read_bio *orig,
* 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:

View File

@ -40,7 +40,6 @@ struct bch_read_bio {
split:1,
have_ioref:1,
narrow_crcs:1,
hole:1,
saw_error:1,
context:2;
};

View 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;