summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-03-01 12:16:02 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2022-03-01 12:16:02 -0500
commitb47430f817634084140b5761fd6d5841606783a5 (patch)
tree372b920dbff3212e3b49147395dd86c514f6f90b
parent5cb4ed822acf0a4b7ac2edc789e01e6b07c45115 (diff)
Update bcachefs sources to 343f851167 btree root repair: fix comparison functionbtree_root_fix
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/bcachefs.h5
-rw-r--r--libbcachefs/btree_repair_missing_root.c11
3 files changed, 11 insertions, 7 deletions
diff --git a/.bcachefs_revision b/.bcachefs_revision
index 4cf38d20..1796a1fb 100644
--- a/.bcachefs_revision
+++ b/.bcachefs_revision
@@ -1 +1 @@
-672594a629658e4efa61a95103407d2f229b90b4
+343f851167bf47cb08333be6a8f32c47ee4921df
diff --git a/libbcachefs/bcachefs.h b/libbcachefs/bcachefs.h
index 75c7adb4..04965f0f 100644
--- a/libbcachefs/bcachefs.h
+++ b/libbcachefs/bcachefs.h
@@ -578,10 +578,11 @@ struct find_btree_nodes {
struct mutex lock;
size_t nr, size;
struct found_btree_node {
- bool range_updated;
- bool overwritten;
+ bool range_updated:1;
+ bool overwritten:1;
u8 btree_id;
u8 level;
+ u8 version;
u32 seq;
u64 cookie;
diff --git a/libbcachefs/btree_repair_missing_root.c b/libbcachefs/btree_repair_missing_root.c
index 696f24fe..2c7915ca 100644
--- a/libbcachefs/btree_repair_missing_root.c
+++ b/libbcachefs/btree_repair_missing_root.c
@@ -70,10 +70,11 @@ static int found_btree_node_cmp_time(struct bch_fs *c,
__BKEY_PADDED(k, BKEY_BTREE_PTR_VAL_U64s_MAX) k_l;
__BKEY_PADDED(k, BKEY_BTREE_PTR_VAL_U64s_MAX) k_r;
struct btree *b_l, *b_r;
- int ret;
+ int ret, cmp = cmp_int(l->version, r->version) ?:
+ cmp_int(l->seq, r->seq);
- if (l->seq != r->seq)
- return cmp_int(l->seq, r->seq);
+ if (cmp)
+ return cmp;
found_btree_node_to_key(&k_l.k, l);
found_btree_node_to_key(&k_r.k, l);
@@ -157,6 +158,7 @@ static void try_read_btree_node(struct find_btree_nodes *f, struct bch_dev *ca,
f->d[f->nr++] = (struct found_btree_node) {
.btree_id = BTREE_NODE_ID(bn),
.level = BTREE_NODE_LEVEL(bn),
+ .version = le16_to_cpu(bn->keys.version),
.seq = BTREE_NODE_SEQ(bn),
.cookie = le64_to_cpu(bn->keys.seq),
.min_key = bn->min_key,
@@ -280,14 +282,15 @@ again:
n->overwritten = true;
else {
n->min_key = bpos_successor(start->max_key);
+ n->range_updated = true;
bubble_up(c, n, end);
goto again;
}
} else if (cmp < 0) {
BUG_ON(bpos_cmp(n->min_key, start->min_key) <= 0);
- start->range_updated = true;
start->max_key = bpos_predecessor(n->min_key);
+ start->range_updated = true;
} else {
char buf[200];