summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/btree_update_interior.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-01-08 16:56:39 +0100
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 23:08:50 +0200
commitdcf64dfbbc3c3c46af5508afed9f46e906fcd748 (patch)
treeb5cad2040447767ffcb19505149e73064b413081 /fs/bcachefs/btree_update_interior.c
parentbcachefs: Reserve some open buckets for btree allocations (diff)
downloadlinux-dcf64dfbbc3c3c46af5508afed9f46e906fcd748.tar.xz
linux-dcf64dfbbc3c3c46af5508afed9f46e906fcd748.zip
bcachefs: Fix btree node split after merge operations
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>
Diffstat (limited to '')
-rw-r--r--fs/bcachefs/btree_update_interior.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index c25ce358f931..3b19c1c7b450 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -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);