]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: bch2_data_update_inflight_to_text()
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 31 Dec 2024 23:16:17 +0000 (18:16 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 15 Mar 2025 01:02:11 +0000 (21:02 -0400)
Add a new helper for bch2_moving_ctxt_to_text(), which may be used to
debug if moving_ios are getting stuck.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/data_update.c
fs/bcachefs/data_update.h
fs/bcachefs/move.c

index e2050256136e289944c6d85500e8cd245a6ad302..1cfb86823fdff915af1ebf58f396ecc1ee6b42ea 100644 (file)
@@ -430,6 +430,8 @@ int bch2_data_update_index_update(struct bch_write_op *op)
 void bch2_data_update_read_done(struct data_update *m,
                                struct bch_extent_crc_unpacked crc)
 {
+       m->read_done = true;
+
        /* write bio must own pages: */
        BUG_ON(!m->op.wbio.bio.bi_vcnt);
 
@@ -541,7 +543,8 @@ void bch2_data_update_opts_to_text(struct printbuf *out, struct bch_fs *c,
                                   struct bch_io_opts *io_opts,
                                   struct data_update_opts *data_opts)
 {
-       printbuf_tabstop_push(out, 20);
+       if (!out->nr_tabstops)
+               printbuf_tabstop_push(out, 20);
 
        prt_str_indented(out, "rewrite ptrs:\t");
        bch2_prt_u64_base2(out, data_opts->rewrite_ptrs);
@@ -565,6 +568,7 @@ void bch2_data_update_opts_to_text(struct printbuf *out, struct bch_fs *c,
 
        prt_str_indented(out, "extra replicas:\t");
        prt_u64(out, data_opts->extra_replicas);
+       prt_newline(out);
 }
 
 void bch2_data_update_to_text(struct printbuf *out, struct data_update *m)
@@ -576,6 +580,17 @@ void bch2_data_update_to_text(struct printbuf *out, struct data_update *m)
        bch2_bkey_val_to_text(out, m->op.c, bkey_i_to_s_c(m->k.k));
 }
 
+void bch2_data_update_inflight_to_text(struct printbuf *out, struct data_update *m)
+{
+       bch2_bkey_val_to_text(out, m->op.c, bkey_i_to_s_c(m->k.k));
+       prt_newline(out);
+       printbuf_indent_add(out, 2);
+       bch2_data_update_opts_to_text(out, m->op.c, &m->op.opts, &m->data_opts);
+       prt_printf(out, "read_done:\t\%u\n", m->read_done);
+       bch2_write_op_to_text(out, &m->op);
+       printbuf_indent_sub(out, 2);
+}
+
 int bch2_extent_drop_ptrs(struct btree_trans *trans,
                          struct btree_iter *iter,
                          struct bkey_s_c k,
index e4b50723428e27c0073a4b75bd14d580fd4501a0..7a200e6b770b1dd5f6b8b38a4b9965af661f8fff 100644 (file)
@@ -22,6 +22,7 @@ void bch2_data_update_opts_to_text(struct printbuf *, struct bch_fs *,
 
 struct data_update {
        /* extent being updated: */
+       bool                    read_done;
        enum btree_id           btree_id;
        struct bkey_buf         k;
        struct data_update_opts data_opts;
@@ -31,6 +32,7 @@ struct data_update {
 };
 
 void bch2_data_update_to_text(struct printbuf *, struct data_update *);
+void bch2_data_update_inflight_to_text(struct printbuf *, struct data_update *);
 
 int bch2_data_update_index_update(struct bch_write_op *);
 
index 160b4374160aa12315609438803a6347bac778f7..2e09f980f3f597718b318b4e53531902fc8a3523 100644 (file)
@@ -88,13 +88,12 @@ static void move_free(struct moving_io *io)
        if (io->b)
                atomic_dec(&io->b->count);
 
-       bch2_data_update_exit(&io->write);
-
        mutex_lock(&ctxt->lock);
        list_del(&io->io_list);
        wake_up(&ctxt->wait);
        mutex_unlock(&ctxt->lock);
 
+       bch2_data_update_exit(&io->write);
        kfree(io);
 }
 
@@ -1216,7 +1215,7 @@ static void bch2_moving_ctxt_to_text(struct printbuf *out, struct bch_fs *c, str
 
        mutex_lock(&ctxt->lock);
        list_for_each_entry(io, &ctxt->ios, io_list)
-               bch2_write_op_to_text(out, &io->write.op);
+               bch2_data_update_inflight_to_text(out, &io->write);
        mutex_unlock(&ctxt->lock);
 
        printbuf_indent_sub(out, 4);