bcachefs: Set bucket needs discard, inc gen on empty -> nonempty transition
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 8 Dec 2024 01:43:07 +0000 (20:43 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:22 +0000 (01:36 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_background.c

index b2d570453351f2b61e82a27b973396e864b9a654..62069231c63b29e7800349a411b7f5fb90ada672 100644 (file)
@@ -856,7 +856,10 @@ int bch2_trigger_alloc(struct btree_trans *trans,
        if (flags & BTREE_TRIGGER_transactional) {
                alloc_data_type_set(new_a, new_a->data_type);
 
-               if (bch2_bucket_sectors_total(*new_a) > bch2_bucket_sectors_total(*old_a)) {
+               int is_empty_delta = (int) data_type_is_empty(new_a->data_type) -
+                                    (int) data_type_is_empty(old_a->data_type);
+
+               if (is_empty_delta < 0) {
                        new_a->io_time[READ] = bch2_current_io_time(c, READ);
                        new_a->io_time[WRITE]= bch2_current_io_time(c, WRITE);
                        SET_BCH_ALLOC_V4_NEED_INC_GEN(new_a, true);