bcachefs: Fix move path when move_stats == NULL
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 29 Jun 2022 21:14:06 +0000 (17:14 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:35 +0000 (17:09 -0400)
This isn't done very often, but it is legitimate

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

index eae93c65e1c712e5c51dbd0d23ec0c65ea83eb03..8b44d95c32ce32ed8f9e72e1c87a7659477ff90e 100644 (file)
@@ -140,13 +140,15 @@ void bch2_moving_ctxt_exit(struct moving_context *ctxt)
 {
        move_ctxt_wait_event(ctxt, NULL, list_empty(&ctxt->reads));
        closure_sync(&ctxt->cl);
-       progress_list_del(ctxt->c, ctxt->stats);
-
        EBUG_ON(atomic_read(&ctxt->write_sectors));
 
-       trace_move_data(ctxt->c,
-                       atomic64_read(&ctxt->stats->sectors_moved),
-                       atomic64_read(&ctxt->stats->keys_moved));
+       if (ctxt->stats) {
+               progress_list_del(ctxt->c, ctxt->stats);
+
+               trace_move_data(ctxt->c,
+                               atomic64_read(&ctxt->stats->sectors_moved),
+                               atomic64_read(&ctxt->stats->keys_moved));
+       }
 }
 
 void bch2_moving_ctxt_init(struct moving_context *ctxt,
@@ -164,13 +166,14 @@ void bch2_moving_ctxt_init(struct moving_context *ctxt,
        ctxt->wp        = wp;
        ctxt->wait_on_copygc = wait_on_copygc;
 
-       progress_list_add(c, stats);
        closure_init_stack(&ctxt->cl);
        INIT_LIST_HEAD(&ctxt->reads);
        init_waitqueue_head(&ctxt->wait);
 
-       if (stats)
+       if (stats) {
+               progress_list_add(c, stats);
                stats->data_type = BCH_DATA_user;
+       }
 }
 
 void bch_move_stats_init(struct bch_move_stats *stats, char *name)