summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-03-04 02:51:12 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-03-13 11:34:52 -0400
commitbaf0afc90750366a9221dc9917b09b78d1f70ef6 (patch)
tree9c28d472db4b9d8ec5238d4e7aae8b76c76d7bf3
parent77e9fd1bada7e41f423820d17efa987bb1a8a1ad (diff)
bcachefs: moving_context->stats is allowed to be NULL
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/data_update.c2
-rw-r--r--fs/bcachefs/move.c37
2 files changed, 24 insertions, 15 deletions
diff --git a/fs/bcachefs/data_update.c b/fs/bcachefs/data_update.c
index ca469473c72c..eb91e24c3157 100644
--- a/fs/bcachefs/data_update.c
+++ b/fs/bcachefs/data_update.c
@@ -274,7 +274,7 @@ next:
}
continue;
nomatch:
- if (m->ctxt) {
+ if (m->ctxt && m->ctxt->stats) {
BUG_ON(k.k->p.offset <= iter.pos.offset);
atomic64_inc(&m->ctxt->stats->keys_raced);
atomic64_add(k.k->p.offset - iter.pos.offset,
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index dd368a50c6e8..e87e7aee91a8 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -304,12 +304,6 @@ static int bch2_move_extent(struct btree_trans *trans,
if (ret && ret != -BCH_ERR_unwritten_extent_update)
goto err_free_pages;
- io->write.ctxt = ctxt;
- io->write.op.end_io = move_write_done;
-
- atomic64_inc(&ctxt->stats->keys_moved);
- atomic64_add(k.k->size, &ctxt->stats->sectors_moved);
-
if (ret == -BCH_ERR_unwritten_extent_update) {
bch2_update_unwritten_extent(trans, &io->write);
move_free(io);
@@ -318,6 +312,14 @@ static int bch2_move_extent(struct btree_trans *trans,
BUG_ON(ret);
+ io->write.ctxt = ctxt;
+ io->write.op.end_io = move_write_done;
+
+ if (ctxt->stats) {
+ atomic64_inc(&ctxt->stats->keys_moved);
+ atomic64_add(k.k->size, &ctxt->stats->sectors_moved);
+ }
+
this_cpu_add(c->counters[BCH_COUNTER_io_move], k.k->size);
this_cpu_add(c->counters[BCH_COUNTER_move_extent_read], k.k->size);
trace_move_extent_read(k.k);
@@ -469,9 +471,11 @@ static int __bch2_move_data(struct moving_context *ctxt,
bch2_bkey_buf_init(&sk);
bch2_trans_init(&trans, c, 0, 0);
- ctxt->stats->data_type = BCH_DATA_user;
- ctxt->stats->btree_id = btree_id;
- ctxt->stats->pos = start;
+ if (ctxt->stats) {
+ ctxt->stats->data_type = BCH_DATA_user;
+ ctxt->stats->btree_id = btree_id;
+ ctxt->stats->pos = start;
+ }
bch2_trans_iter_init(&trans, &iter, btree_id, start,
BTREE_ITER_PREFETCH|
@@ -496,7 +500,8 @@ static int __bch2_move_data(struct moving_context *ctxt,
if (bkey_ge(bkey_start_pos(k.k), end))
break;
- ctxt->stats->pos = iter.pos;
+ if (ctxt->stats)
+ ctxt->stats->pos = iter.pos;
if (!bkey_extent_is_direct_data(k.k))
goto next_nondata;
@@ -536,7 +541,8 @@ static int __bch2_move_data(struct moving_context *ctxt,
if (ctxt->rate)
bch2_ratelimit_increment(ctxt->rate, k.k->size);
next:
- atomic64_add(k.k->size, &ctxt->stats->sectors_seen);
+ if (ctxt->stats)
+ atomic64_add(k.k->size, &ctxt->stats->sectors_seen);
next_nondata:
bch2_btree_iter_advance(&iter);
}
@@ -760,7 +766,8 @@ int __bch2_evacuate_bucket(struct btree_trans *trans,
if (ctxt->rate)
bch2_ratelimit_increment(ctxt->rate, k.k->size);
- atomic64_add(k.k->size, &ctxt->stats->sectors_seen);
+ if (ctxt->stats)
+ atomic64_add(k.k->size, &ctxt->stats->sectors_seen);
} else {
struct btree *b;
@@ -787,8 +794,10 @@ int __bch2_evacuate_bucket(struct btree_trans *trans,
if (ctxt->rate)
bch2_ratelimit_increment(ctxt->rate,
c->opts.btree_node_size >> 9);
- atomic64_add(c->opts.btree_node_size >> 9, &ctxt->stats->sectors_seen);
- atomic64_add(c->opts.btree_node_size >> 9, &ctxt->stats->sectors_moved);
+ if (ctxt->stats) {
+ atomic64_add(c->opts.btree_node_size >> 9, &ctxt->stats->sectors_seen);
+ atomic64_add(c->opts.btree_node_size >> 9, &ctxt->stats->sectors_moved);
+ }
}
next:
bp_offset++;