diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-03-01 12:16:02 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-03-01 12:16:02 -0500 |
commit | b47430f817634084140b5761fd6d5841606783a5 (patch) | |
tree | 372b920dbff3212e3b49147395dd86c514f6f90b | |
parent | 5cb4ed822acf0a4b7ac2edc789e01e6b07c45115 (diff) |
Update bcachefs sources to 343f851167 btree root repair: fix comparison functionbtree_root_fix
-rw-r--r-- | .bcachefs_revision | 2 | ||||
-rw-r--r-- | libbcachefs/bcachefs.h | 5 | ||||
-rw-r--r-- | libbcachefs/btree_repair_missing_root.c | 11 |
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]; |