Skip to content

Commit 54a1298

Browse files
author
Kent Overstreet
committed
bcachefs: EIO errcode cleanup
We want to be using private errcodes whenever possible, for better error messages. Signed-off-by: Kent Overstreet <[email protected]>
1 parent 7a51608 commit 54a1298

File tree

5 files changed

+33
-27
lines changed

5 files changed

+33
-27
lines changed

fs/bcachefs/buckets.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ int bch2_bucket_ref_update(struct btree_trans *trans, struct bch_dev *ca,
486486
return ret;
487487
err:
488488
bch2_dump_trans_updates(trans);
489-
ret = -EIO;
489+
ret = -BCH_ERR_bucket_ref_update;
490490
goto out;
491491
}
492492

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

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

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

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

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

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

10281028
int bch2_trans_mark_metadata_bucket(struct btree_trans *trans,

fs/bcachefs/ec.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
193193
a->dirty_sectors,
194194
a->stripe, s.k->p.offset,
195195
(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
196-
ret = -EIO;
196+
ret = -BCH_ERR_mark_stripe;
197197
goto err;
198198
}
199199

@@ -204,7 +204,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
204204
a->dirty_sectors,
205205
a->cached_sectors,
206206
(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
207-
ret = -EIO;
207+
ret = -BCH_ERR_mark_stripe;
208208
goto err;
209209
}
210210
} else {
@@ -214,7 +214,7 @@ static int __mark_stripe_bucket(struct btree_trans *trans,
214214
bucket.inode, bucket.offset, a->gen,
215215
a->stripe,
216216
(bch2_bkey_val_to_text(&buf, c, s.s_c), buf.buf))) {
217-
ret = -EIO;
217+
ret = -BCH_ERR_mark_stripe;
218218
goto err;
219219
}
220220

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

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

275275
struct bch_dev *ca = bch2_dev_tryget(c, ptr->dev);
276276
if (unlikely(!ca)) {
277-
if (!(flags & BTREE_TRIGGER_overwrite))
278-
ret = -EIO;
277+
if (ptr->dev != BCH_SB_MEMBER_INVALID && !(flags & BTREE_TRIGGER_overwrite))
278+
ret = -BCH_ERR_mark_stripe;
279279
goto err;
280280
}
281281

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

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

845845
v = &bkey_i_to_stripe(&buf->key)->v;
846846

847847
if (!bch2_ptr_matches_stripe(v, rbio->pick)) {
848848
bch_err_ratelimited(c,
849849
"error doing reconstruct read: pointer doesn't match stripe");
850-
ret = -EIO;
850+
ret = -BCH_ERR_stripe_reconstruct;
851851
goto err;
852852
}
853853

854854
offset = rbio->bio.bi_iter.bi_sector - v->ptrs[rbio->pick.ec.block].offset;
855855
if (offset + bio_sectors(&rbio->bio) > le16_to_cpu(v->sectors)) {
856856
bch_err_ratelimited(c,
857857
"error doing reconstruct read: read is bigger than stripe");
858-
ret = -EIO;
858+
ret = -BCH_ERR_stripe_reconstruct;
859859
goto err;
860860
}
861861

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

fs/bcachefs/errcode.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,15 @@
244244
x(EIO, btree_node_read_error) \
245245
x(EIO, btree_node_read_validate_error) \
246246
x(EIO, btree_need_topology_repair) \
247+
x(EIO, bucket_ref_update) \
248+
x(EIO, trigger_pointer) \
249+
x(EIO, trigger_stripe_pointer) \
250+
x(EIO, metadata_bucket_inconsistency) \
251+
x(EIO, mark_stripe) \
252+
x(EIO, stripe_reconstruct) \
253+
x(EIO, key_type_error) \
254+
x(EIO, no_device_to_read_from) \
255+
x(EIO, missing_indirect_extent) \
247256
x(BCH_ERR_btree_node_read_err, btree_node_read_err_fixable) \
248257
x(BCH_ERR_btree_node_read_err, btree_node_read_err_want_retry) \
249258
x(BCH_ERR_btree_node_read_err, btree_node_read_err_must_retry) \

fs/bcachefs/extents.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
115115
int ret = 0;
116116

117117
if (k.k->type == KEY_TYPE_error)
118-
return -EIO;
118+
return -BCH_ERR_key_type_error;
119119

120120
rcu_read_lock();
121121
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,
133133
* read:
134134
*/
135135
if (!ret && !p.ptr.cached)
136-
ret = -EIO;
136+
ret = -BCH_ERR_no_device_to_read_from;
137137

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

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

149-
if (!p.idx && !ca)
149+
if (!p.idx && (!ca || !bch2_dev_is_readable(ca)))
150150
p.idx++;
151151

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

155-
if (!p.idx && !bch2_dev_is_readable(ca))
156-
p.idx++;
157-
158-
if (p.idx >= (unsigned) p.has_ec + 1)
155+
if (p.idx > (unsigned) p.has_ec)
159156
continue;
160157

161158
if (ret > 0 && !ptr_better(c, p, *pick))

fs/bcachefs/io_read.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ int __bch2_read_indirect_extent(struct btree_trans *trans,
777777
orig_k->k->k.size,
778778
reflink_offset);
779779
bch2_inconsistent_error(trans->c);
780-
ret = -EIO;
780+
ret = -BCH_ERR_missing_indirect_extent;
781781
goto err;
782782
}
783783

0 commit comments

Comments
 (0)