]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bkey_sort.c
Merge remote-tracking branch 'amoz/devel'
[bcachefs-tools-debian] / libbcachefs / bkey_sort.c
index b1385a77da1146f6efd643d389a73aa999745244..bcca9e76a0b4bf40f20903c856e7559e60b87da1 100644 (file)
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 #include "bcachefs.h"
 #include "bkey_buf.h"
+#include "bkey_cmp.h"
 #include "bkey_sort.h"
 #include "bset.h"
 #include "extents.h"
@@ -45,7 +46,7 @@ static inline void sort_iter_advance(struct sort_iter *iter, sort_cmp_fn cmp)
 
        BUG_ON(!iter->used);
 
-       i->k = bkey_next(i->k);
+       i->k = bkey_p_next(i->k);
 
        BUG_ON(i->k > i->end);
 
@@ -105,9 +106,9 @@ bch2_key_sort_fix_overlapping(struct bch_fs *c, struct bset *dst,
        while ((k = sort_iter_peek(iter))) {
                if (!bkey_deleted(k) &&
                    !should_drop_next_key(iter)) {
-                       bkey_copy(out, k);
+                       bkey_p_copy(out, k);
                        btree_keys_account_key_add(&nr, 0, out);
-                       out = bkey_next(out);
+                       out = bkey_p_next(out);
                }
 
                sort_iter_advance(iter, key_sort_fix_overlapping_cmp);
@@ -136,15 +137,17 @@ bch2_sort_repack(struct bset *dst, struct btree *src,
                        continue;
 
                if (!transform)
-                       bkey_copy(out, in);
+                       bkey_p_copy(out, in);
                else if (bch2_bkey_transform(out_f, out, bkey_packed(in)
                                             ? in_f : &bch2_bkey_format_current, in))
                        out->format = KEY_FORMAT_LOCAL_BTREE;
                else
                        bch2_bkey_unpack(src, (void *) out, in);
 
+               out->needs_whiteout = false;
+
                btree_keys_account_key_add(&nr, 0, out);
-               out = bkey_next(out);
+               out = bkey_p_next(out);
        }
 
        dst->u64s = cpu_to_le16((u64 *) out - dst->_data);
@@ -155,7 +158,7 @@ static inline int sort_keys_cmp(struct btree *b,
                                struct bkey_packed *l,
                                struct bkey_packed *r)
 {
-       return bch2_bkey_cmp_packed(b, l, r) ?:
+       return bch2_bkey_cmp_packed_inlined(b, l, r) ?:
                (int) bkey_deleted(r) - (int) bkey_deleted(l) ?:
                (int) l->needs_whiteout - (int) r->needs_whiteout;
 }
@@ -177,7 +180,7 @@ unsigned bch2_sort_keys(struct bkey_packed *dst,
                        continue;
 
                while ((next = sort_iter_peek(iter)) &&
-                      !bch2_bkey_cmp_packed(iter->b, in, next)) {
+                      !bch2_bkey_cmp_packed_inlined(iter->b, in, next)) {
                        BUG_ON(in->needs_whiteout &&
                               next->needs_whiteout);
                        needs_whiteout |= in->needs_whiteout;
@@ -185,13 +188,13 @@ unsigned bch2_sort_keys(struct bkey_packed *dst,
                }
 
                if (bkey_deleted(in)) {
-                       memcpy_u64s(out, in, bkeyp_key_u64s(f, in));
+                       memcpy_u64s_small(out, in, bkeyp_key_u64s(f, in));
                        set_bkeyp_val_u64s(f, out, 0);
                } else {
-                       bkey_copy(out, in);
+                       bkey_p_copy(out, in);
                }
                out->needs_whiteout |= needs_whiteout;
-               out = bkey_next(out);
+               out = bkey_p_next(out);
        }
 
        return (u64 *) out - (u64 *) dst;