mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
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:
parent
f4b84bac20
commit
881b598ef1
|
|
@ -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) \
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ struct bch_read_bio {
|
|||
split:1,
|
||||
have_ioref:1,
|
||||
narrow_crcs:1,
|
||||
hole:1,
|
||||
saw_error:1,
|
||||
context:2;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user