]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
bcachefs: Fix btree node split after merge operations
authorKent Overstreet <kent.overstreet@gmail.com>
Fri, 8 Jan 2021 15:56:39 +0000 (10:56 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:50 +0000 (17:08 -0400)
A btree node merge operation deletes a key in the parent node; if when
inserting into the parent node we split the parent node, we can end up
with a whiteout in the parent node that we don't want.

The existing code drops them before doing the split, because they can
screw up picking the pivot, but we forgot about the unwritten writeouts
area - that needs to be cleared out too.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_update_interior.c

index c25ce358f931f5035b7c515ff3b501ddbdaffff7..3b19c1c7b4506815337bc9277eb6f4921e1636e6 100644 (file)
@@ -1227,6 +1227,9 @@ static void btree_split_insert_keys(struct btree_update *as, struct btree *b,
                src = n;
        }
 
+       /* Also clear out the unwritten whiteouts area: */
+       b->whiteout_u64s = 0;
+
        i->u64s = cpu_to_le16((u64 *) dst - i->_data);
        set_btree_bset_end(b, b->set);