summaryrefslogtreecommitdiff
path: root/libbcachefs/extents.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-03-29 21:46:58 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-03-29 21:50:53 -0400
commit3e2d5b2b9a45fd185c847f432950f2530171d216 (patch)
tree9652bf8ca2bf389498af11472e718e60b2402898 /libbcachefs/extents.c
parent7c47145f6cdf9826f9dc24c935195b58268b1ec6 (diff)
Update bcachefs sources to 0a2abe7ce837 bcachefs: Don't use designated initializers for disk_accounting_pos
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'libbcachefs/extents.c')
-rw-r--r--libbcachefs/extents.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libbcachefs/extents.c b/libbcachefs/extents.c
index ca2073db..ae7c7a17 100644
--- a/libbcachefs/extents.c
+++ b/libbcachefs/extents.c
@@ -136,8 +136,12 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
if (k.k->type == KEY_TYPE_error)
return -BCH_ERR_key_type_error;
- rcu_read_lock();
struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
+
+ if (bch2_bkey_extent_ptrs_flags(ptrs) & BIT_ULL(BCH_EXTENT_FLAG_poisoned))
+ return -BCH_ERR_extent_poisened;
+
+ rcu_read_lock();
const union bch_extent_entry *entry;
struct extent_ptr_decoded p;
u64 pick_latency;
@@ -223,8 +227,11 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
if (have_io_errors)
return -BCH_ERR_data_read_io_err;
- WARN_ONCE(1, "unhandled error case in %s\n", __func__);
- return -EINVAL;
+ /*
+ * If we get here, we have pointers (bkey_ptrs_validate() ensures that),
+ * but they don't point to valid devices:
+ */
+ return -BCH_ERR_no_devices_valid;
}
/* KEY_TYPE_btree_ptr: */