diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2020-12-19 18:05:09 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2020-12-19 18:05:09 -0500 |
commit | 80846e9c28e76774daf7d2d46115d73f108b98db (patch) | |
tree | 625f8757948c81571e6678279ddedc3c392862a2 /libbcachefs/extents.c | |
parent | db931a4571817d7d61be6bce306f1d42f7cd3398 (diff) |
Update bcachefs sources to 5241335413 bcachefs: Fix for spinning in journal reclaim on startup
Diffstat (limited to 'libbcachefs/extents.c')
-rw-r--r-- | libbcachefs/extents.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libbcachefs/extents.c b/libbcachefs/extents.c index 7fae6a4b..828ccf07 100644 --- a/libbcachefs/extents.c +++ b/libbcachefs/extents.c @@ -1046,11 +1046,13 @@ static const char *extent_ptr_invalid(const struct bch_fs *c, const char *bch2_bkey_ptrs_invalid(const struct bch_fs *c, struct bkey_s_c k) { struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k); + struct bch_devs_list devs; const union bch_extent_entry *entry; struct bch_extent_crc_unpacked crc; unsigned size_ondisk = k.k->size; const char *reason; unsigned nonce = UINT_MAX; + unsigned i; if (k.k->type == KEY_TYPE_btree_ptr) size_ondisk = c->opts.btree_node_size; @@ -1101,6 +1103,12 @@ const char *bch2_bkey_ptrs_invalid(const struct bch_fs *c, struct bkey_s_c k) } } + devs = bch2_bkey_devs(k); + bubble_sort(devs.devs, devs.nr, u8_cmp); + for (i = 0; i + 1 < devs.nr; i++) + if (devs.devs[i] == devs.devs[i + 1]) + return "multiple ptrs to same device"; + return NULL; } |