Commit 54a12984 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: EIO errcode cleanup



We want to be using private errcodes whenever possible, for better error
messages.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 7a51608d
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -486,7 +486,7 @@ int bch2_bucket_ref_update(struct btree_trans *trans, struct bch_dev *ca,
	return ret;
err:
	bch2_dump_trans_updates(trans);
	ret = -EIO;
	ret = -BCH_ERR_bucket_ref_update;
	goto out;
}

@@ -573,7 +573,7 @@ static int bch2_trigger_pointer(struct btree_trans *trans,
	struct bch_dev *ca = bch2_dev_tryget(c, p.ptr.dev);
	if (unlikely(!ca)) {
		if (insert && p.ptr.dev != BCH_SB_MEMBER_INVALID)
			ret = -EIO;
			ret = -BCH_ERR_trigger_pointer;
		goto err;
	}

@@ -602,7 +602,7 @@ static int bch2_trigger_pointer(struct btree_trans *trans,
		if (bch2_fs_inconsistent_on(!g, c, "reference to invalid bucket on device %u\n  %s",
					    p.ptr.dev,
					    (bch2_bkey_val_to_text(&buf, c, k), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_trigger_pointer;
			goto err_unlock;
		}

@@ -647,7 +647,7 @@ static int bch2_trigger_stripe_ptr(struct btree_trans *trans,
			bch2_trans_inconsistent(trans,
				"stripe pointer doesn't match stripe %llu",
				(u64) p.ec.idx);
			ret = -EIO;
			ret = -BCH_ERR_trigger_stripe_pointer;
			goto err;
		}

@@ -686,7 +686,7 @@ static int bch2_trigger_stripe_ptr(struct btree_trans *trans,
					    (u64) p.ec.idx, buf.buf);
			printbuf_exit(&buf);
			bch2_inconsistent_error(c);
			return -EIO;
			return -BCH_ERR_trigger_stripe_pointer;
		}

		m->block_sectors[p.ec.block] += sectors;
@@ -966,7 +966,7 @@ static int __bch2_trans_mark_metadata_bucket(struct btree_trans *trans,
			bch2_data_type_str(a->v.data_type),
			bch2_data_type_str(type),
			bch2_data_type_str(type));
		ret = -EIO;
		ret = -BCH_ERR_metadata_bucket_inconsistency;
		goto err;
	}

@@ -1022,7 +1022,7 @@ static int bch2_mark_metadata_bucket(struct btree_trans *trans, struct bch_dev *
	bucket_unlock(g);
err_unlock:
	percpu_up_read(&c->mark_lock);
	return -EIO;
	return -BCH_ERR_metadata_bucket_inconsistency;
}

int bch2_trans_mark_metadata_bucket(struct btree_trans *trans,
+12 −12
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
				a->dirty_sectors,
				a->stripe, s.k->p.offset,
				(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_mark_stripe;
			goto err;
		}

@@ -204,7 +204,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
				a->dirty_sectors,
				a->cached_sectors,
				(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_mark_stripe;
			goto err;
		}
	} else {
@@ -214,7 +214,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
				bucket.inode, bucket.offset, a->gen,
				a->stripe,
				(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_mark_stripe;
			goto err;
		}

@@ -224,7 +224,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
				bch2_data_type_str(a->data_type),
				bch2_data_type_str(data_type),
				(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_mark_stripe;
			goto err;
		}

@@ -236,7 +236,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
				a->dirty_sectors,
				a->cached_sectors,
				(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_mark_stripe;
			goto err;
		}
	}
@@ -274,8 +274,8 @@ static int mark_stripe_bucket(struct btree_trans *trans,

	struct bch_dev *ca = bch2_dev_tryget(c, ptr->dev);
	if (unlikely(!ca)) {
		if (!(flags & BTREE_TRIGGER_overwrite))
			ret = -EIO;
		if (ptr->dev != BCH_SB_MEMBER_INVALID && !(flags & BTREE_TRIGGER_overwrite))
			ret = -BCH_ERR_mark_stripe;
		goto err;
	}

@@ -294,7 +294,7 @@ static int mark_stripe_bucket(struct btree_trans *trans,
		if (bch2_fs_inconsistent_on(!g, c, "reference to invalid bucket on device %u\n  %s",
					    ptr->dev,
					    (bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
			ret = -EIO;
			ret = -BCH_ERR_mark_stripe;
			goto err_unlock;
		}

@@ -839,7 +839,7 @@ int bch2_ec_read_extent(struct btree_trans *trans, struct bch_read_bio *rbio)
		bch_err_ratelimited(c,
			"error doing reconstruct read: error %i looking up stripe", ret);
		kfree(buf);
		return -EIO;
		return -BCH_ERR_stripe_reconstruct;
	}

	v = &bkey_i_to_stripe(&buf->key)->v;
@@ -847,7 +847,7 @@ int bch2_ec_read_extent(struct btree_trans *trans, struct bch_read_bio *rbio)
	if (!bch2_ptr_matches_stripe(v, rbio->pick)) {
		bch_err_ratelimited(c,
			"error doing reconstruct read: pointer doesn't match stripe");
		ret = -EIO;
		ret = -BCH_ERR_stripe_reconstruct;
		goto err;
	}

@@ -855,7 +855,7 @@ int bch2_ec_read_extent(struct btree_trans *trans, struct bch_read_bio *rbio)
	if (offset + bio_sectors(&rbio->bio) > le16_to_cpu(v->sectors)) {
		bch_err_ratelimited(c,
			"error doing reconstruct read: read is bigger than stripe");
		ret = -EIO;
		ret = -BCH_ERR_stripe_reconstruct;
		goto err;
	}

@@ -871,7 +871,7 @@ int bch2_ec_read_extent(struct btree_trans *trans, struct bch_read_bio *rbio)
	if (ec_nr_failed(buf) > v->nr_redundant) {
		bch_err_ratelimited(c,
			"error doing reconstruct read: unable to read enough blocks");
		ret = -EIO;
		ret = -BCH_ERR_stripe_reconstruct;
		goto err;
	}

+9 −0
Original line number Diff line number Diff line
@@ -244,6 +244,15 @@
	x(EIO,				btree_node_read_error)			\
	x(EIO,				btree_node_read_validate_error)		\
	x(EIO,				btree_need_topology_repair)		\
	x(EIO,				bucket_ref_update)			\
	x(EIO,				trigger_pointer)			\
	x(EIO,				trigger_stripe_pointer)			\
	x(EIO,				metadata_bucket_inconsistency)		\
	x(EIO,				mark_stripe)				\
	x(EIO,				stripe_reconstruct)			\
	x(EIO,				key_type_error)				\
	x(EIO,				no_device_to_read_from)			\
	x(EIO,				missing_indirect_extent)		\
	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)		\
+4 −7
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
	int ret = 0;

	if (k.k->type == KEY_TYPE_error)
		return -EIO;
		return -BCH_ERR_key_type_error;

	rcu_read_lock();
	bkey_for_each_ptr_decode(k.k, ptrs, p, entry) {
@@ -133,7 +133,7 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
		 * read:
		 */
		if (!ret && !p.ptr.cached)
			ret = -EIO;
			ret = -BCH_ERR_no_device_to_read_from;

		struct bch_dev *ca = bch2_dev_rcu(c, p.ptr.dev);

@@ -146,16 +146,13 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
				? f->idx
				: f->idx + 1;

		if (!p.idx && !ca)
		if (!p.idx && (!ca || !bch2_dev_is_readable(ca)))
			p.idx++;

		if (!p.idx && p.has_ec && bch2_force_reconstruct_read)
			p.idx++;

		if (!p.idx && !bch2_dev_is_readable(ca))
			p.idx++;

		if (p.idx >= (unsigned) p.has_ec + 1)
		if (p.idx > (unsigned) p.has_ec)
			continue;

		if (ret > 0 && !ptr_better(c, p, *pick))
+1 −1
Original line number Diff line number Diff line
@@ -777,7 +777,7 @@ int __bch2_read_indirect_extent(struct btree_trans *trans,
			orig_k->k->k.size,
			reflink_offset);
		bch2_inconsistent_error(trans->c);
		ret = -EIO;
		ret = -BCH_ERR_missing_indirect_extent;
		goto err;
	}