summaryrefslogtreecommitdiff
path: root/libbcachefs/ec.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-04-06 14:13:15 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-04-06 14:13:15 -0400
commit790ca9522a96efe321aae36fb0d7f4e437110b0f (patch)
tree06b208f7671ee218bcaa11876a7fb37f1806f3d7 /libbcachefs/ec.c
parent498874fdb71973c1856f35414bd607e58be16790 (diff)
Update bcachefs sources to e027cf9aa0 fixup! bcachefs: Defer checking of alloc -> lru refs until after RW
Diffstat (limited to 'libbcachefs/ec.c')
-rw-r--r--libbcachefs/ec.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/libbcachefs/ec.c b/libbcachefs/ec.c
index 616a5512..a86b9748 100644
--- a/libbcachefs/ec.c
+++ b/libbcachefs/ec.c
@@ -102,24 +102,34 @@ struct ec_bio {
/* Stripes btree keys: */
-const char *bch2_stripe_invalid(const struct bch_fs *c, struct bkey_s_c k)
+int bch2_stripe_invalid(const struct bch_fs *c, struct bkey_s_c k,
+ int rw, struct printbuf *err)
{
const struct bch_stripe *s = bkey_s_c_to_stripe(k).v;
- if (!bkey_cmp(k.k->p, POS_MIN))
- return "stripe at pos 0";
+ if (!bkey_cmp(k.k->p, POS_MIN)) {
+ pr_buf(err, "stripe at POS_MIN");
+ return -EINVAL;
+ }
- if (k.k->p.inode)
- return "invalid stripe key";
+ if (k.k->p.inode) {
+ pr_buf(err, "nonzero inode field");
+ return -EINVAL;
+ }
- if (bkey_val_bytes(k.k) < sizeof(*s))
- return "incorrect value size";
+ if (bkey_val_bytes(k.k) < sizeof(*s)) {
+ pr_buf(err, "incorrect value size (%zu < %zu)",
+ bkey_val_bytes(k.k), sizeof(*s));
+ return -EINVAL;
+ }
- if (bkey_val_bytes(k.k) < sizeof(*s) ||
- bkey_val_u64s(k.k) < stripe_val_u64s(s))
- return "incorrect value size";
+ if (bkey_val_u64s(k.k) < stripe_val_u64s(s)) {
+ pr_buf(err, "incorrect value size (%zu < %u)",
+ bkey_val_u64s(k.k), stripe_val_u64s(s));
+ return -EINVAL;
+ }
- return bch2_bkey_ptrs_invalid(c, k);
+ return bch2_bkey_ptrs_invalid(c, k, rw, err);
}
void bch2_stripe_to_text(struct printbuf *out, struct bch_fs *c,