* [PATCH v2] bcachefs: Reuse transaction
@ 2025-02-12 17:29 Alan Huang
2025-02-12 17:41 ` Kent Overstreet
0 siblings, 1 reply; 2+ messages in thread
From: Alan Huang @ 2025-02-12 17:29 UTC (permalink / raw)
To: kent.overstreet; +Cc: linux-bcachefs, Alan Huang
bch2_nocow_write_convert_unwritten is already in transaction context:
00191 ========= TEST generic/648
00242 kernel BUG at fs/bcachefs/btree_iter.c:3332!
00242 Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
00242 Modules linked in:
00242 CPU: 4 UID: 0 PID: 2593 Comm: fsstress Not tainted 6.13.0-rc3-ktest-g345af8f855b7 #14403
00242 Hardware name: linux,dummy-virt (DT)
00242 pstate: 60001005 (nZCv daif -PAN -UAO -TCO -DIT +SSBS BTYPE=--)
00242 pc : __bch2_trans_get+0x120/0x410
00242 lr : __bch2_trans_get+0xcc/0x410
00242 sp : ffffff80d89af600
00242 x29: ffffff80d89af600 x28: ffffff80ddb23000 x27: 00000000fffff705
00242 x26: ffffff80ddb23028 x25: ffffff80d8903fe0 x24: ffffff80ebb30168
00242 x23: ffffff80c8aeb500 x22: 000000000000005d x21: ffffff80d8904078
00242 x20: ffffff80d8900000 x19: ffffff80da9e8000 x18: 0000000000000000
00242 x17: 64747568735f6c61 x16: 6e72756f6a20726f x15: 0000000000000028
00242 x14: 0000000000000004 x13: 000000000000f787 x12: ffffffc081bbcdc8
00242 x11: 0000000000000000 x10: 0000000000000003 x9 : ffffffc08094efbc
00242 x8 : 000000001092c111 x7 : 000000000000000c x6 : ffffffc083c31fc4
00242 x5 : ffffffc083c31f28 x4 : ffffff80c8aeb500 x3 : ffffff80ebb30000
00242 x2 : 0000000000000001 x1 : 0000000000000a21 x0 : 000000000000028e
00242 Call trace:
00242 __bch2_trans_get+0x120/0x410 (P)
00242 bch2_inum_offset_err_msg+0x48/0xb0
00242 bch2_nocow_write_convert_unwritten+0x3d0/0x530
00242 bch2_nocow_write+0xeb0/0x1000
00242 __bch2_write+0x330/0x4e8
00242 bch2_write+0x1f0/0x530
00242 bch2_direct_write+0x530/0xc00
00242 bch2_write_iter+0x160/0xbe0
00242 vfs_write+0x1cc/0x360
00242 ksys_write+0x5c/0xf0
00242 __arm64_sys_write+0x20/0x30
00242 invoke_syscall.constprop.0+0x54/0xe8
00242 do_el0_svc+0x44/0xc0
00242 el0_svc+0x34/0xa0
00242 el0t_64_sync_handler+0x104/0x130
00242 el0t_64_sync+0x154/0x158
00242 Code: 6b01001f 54ffff01 79408460 3617fec0 (d4210000)
00242 ---[ end trace 0000000000000000 ]---
00242 Kernel panic - not syncing: Oops - BUG: Fatal exception
Signed-off-by: Alan Huang <mmpgouride@gmail.com>
---
fs/bcachefs/io_write.c | 33 +++++++++++++++++++++++++++++++--
fs/bcachefs/io_write.h | 4 ++++
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c
index 0d4a7e58251a..738bdbfbdb14 100644
--- a/fs/bcachefs/io_write.c
+++ b/fs/bcachefs/io_write.c
@@ -396,6 +396,35 @@ static int bch2_write_index_default(struct bch_write_op *op)
/* Writes */
+void bch2_write_op_error_trans(struct btree_trans *trans, struct printbuf *out,
+ struct bch_write_op *op, u64 offset, const char *fmt, ...)
+{
+ if (op->subvol)
+ lockrestart_do(trans,
+ bch2_inum_offset_err_msg_trans(trans, out,
+ (subvol_inum) { op->subvol, op->pos.inode, },
+ offset << 9));
+ else {
+ struct bpos pos = op->pos;
+ pos.offset = offset;
+ lockrestart_do(trans, bch2_inum_snap_offset_err_msg_trans(trans, out, pos));
+ }
+
+ prt_str(out, "write error: ");
+
+ va_list args;
+ va_start(args, fmt);
+ prt_vprintf(out, fmt, args);
+ va_end(args);
+
+ if (op->flags & BCH_WRITE_move) {
+ struct data_update *u = container_of(op, struct data_update, op);
+
+ prt_printf(out, "\n from internal move ");
+ bch2_bkey_val_to_text(out, op->c, bkey_i_to_s_c(u->k.k));
+ }
+}
+
void bch2_write_op_error(struct printbuf *out, struct bch_write_op *op, u64 offset,
const char *fmt, ...)
{
@@ -1214,8 +1243,8 @@ static void bch2_nocow_write_convert_unwritten(struct bch_write_op *op)
struct bkey_i *insert = bch2_keylist_front(&op->insert_keys);
struct printbuf buf = PRINTBUF;
- bch2_write_op_error(&buf, op, bkey_start_offset(&insert->k),
- "btree update error: %s", bch2_err_str(ret));
+ bch2_write_op_error_trans(trans, &buf, op, bkey_start_offset(&insert->k),
+ "btree update error: %s", bch2_err_str(ret));
bch_err_ratelimited(c, "%s", buf.buf);
printbuf_exit(&buf);
}
diff --git a/fs/bcachefs/io_write.h b/fs/bcachefs/io_write.h
index 2d12ffb94736..bf942566a8eb 100644
--- a/fs/bcachefs/io_write.h
+++ b/fs/bcachefs/io_write.h
@@ -20,6 +20,10 @@ static inline void bch2_latency_acct(struct bch_dev *ca, u64 submit_time, int rw
void bch2_submit_wbio_replicas(struct bch_write_bio *, struct bch_fs *,
enum bch_data_type, const struct bkey_i *, bool);
+__printf(5, 6)
+void bch2_write_op_error_trans(struct btree_trans *trans, struct printbuf *out,
+ struct bch_write_op *op, u64, const char *, ...);
+
__printf(4, 5)
void bch2_write_op_error(struct printbuf *out, struct bch_write_op *op, u64,
const char *, ...);
--
2.47.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v2] bcachefs: Reuse transaction
2025-02-12 17:29 [PATCH v2] bcachefs: Reuse transaction Alan Huang
@ 2025-02-12 17:41 ` Kent Overstreet
0 siblings, 0 replies; 2+ messages in thread
From: Kent Overstreet @ 2025-02-12 17:41 UTC (permalink / raw)
To: Alan Huang; +Cc: linux-bcachefs
On Thu, Feb 13, 2025 at 01:29:16AM +0800, Alan Huang wrote:
> bch2_nocow_write_convert_unwritten is already in transaction context:
>
> 00191 ========= TEST generic/648
> 00242 kernel BUG at fs/bcachefs/btree_iter.c:3332!
> 00242 Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
> 00242 Modules linked in:
> 00242 CPU: 4 UID: 0 PID: 2593 Comm: fsstress Not tainted 6.13.0-rc3-ktest-g345af8f855b7 #14403
> 00242 Hardware name: linux,dummy-virt (DT)
> 00242 pstate: 60001005 (nZCv daif -PAN -UAO -TCO -DIT +SSBS BTYPE=--)
> 00242 pc : __bch2_trans_get+0x120/0x410
> 00242 lr : __bch2_trans_get+0xcc/0x410
> 00242 sp : ffffff80d89af600
> 00242 x29: ffffff80d89af600 x28: ffffff80ddb23000 x27: 00000000fffff705
> 00242 x26: ffffff80ddb23028 x25: ffffff80d8903fe0 x24: ffffff80ebb30168
> 00242 x23: ffffff80c8aeb500 x22: 000000000000005d x21: ffffff80d8904078
> 00242 x20: ffffff80d8900000 x19: ffffff80da9e8000 x18: 0000000000000000
> 00242 x17: 64747568735f6c61 x16: 6e72756f6a20726f x15: 0000000000000028
> 00242 x14: 0000000000000004 x13: 000000000000f787 x12: ffffffc081bbcdc8
> 00242 x11: 0000000000000000 x10: 0000000000000003 x9 : ffffffc08094efbc
> 00242 x8 : 000000001092c111 x7 : 000000000000000c x6 : ffffffc083c31fc4
> 00242 x5 : ffffffc083c31f28 x4 : ffffff80c8aeb500 x3 : ffffff80ebb30000
> 00242 x2 : 0000000000000001 x1 : 0000000000000a21 x0 : 000000000000028e
> 00242 Call trace:
> 00242 __bch2_trans_get+0x120/0x410 (P)
> 00242 bch2_inum_offset_err_msg+0x48/0xb0
> 00242 bch2_nocow_write_convert_unwritten+0x3d0/0x530
> 00242 bch2_nocow_write+0xeb0/0x1000
> 00242 __bch2_write+0x330/0x4e8
> 00242 bch2_write+0x1f0/0x530
> 00242 bch2_direct_write+0x530/0xc00
> 00242 bch2_write_iter+0x160/0xbe0
> 00242 vfs_write+0x1cc/0x360
> 00242 ksys_write+0x5c/0xf0
> 00242 __arm64_sys_write+0x20/0x30
> 00242 invoke_syscall.constprop.0+0x54/0xe8
> 00242 do_el0_svc+0x44/0xc0
> 00242 el0_svc+0x34/0xa0
> 00242 el0t_64_sync_handler+0x104/0x130
> 00242 el0t_64_sync+0x154/0x158
> 00242 Code: 6b01001f 54ffff01 79408460 3617fec0 (d4210000)
> 00242 ---[ end trace 0000000000000000 ]---
> 00242 Kernel panic - not syncing: Oops - BUG: Fatal exception
>
> Signed-off-by: Alan Huang <mmpgouride@gmail.com>
Applied
> ---
> fs/bcachefs/io_write.c | 33 +++++++++++++++++++++++++++++++--
> fs/bcachefs/io_write.h | 4 ++++
> 2 files changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c
> index 0d4a7e58251a..738bdbfbdb14 100644
> --- a/fs/bcachefs/io_write.c
> +++ b/fs/bcachefs/io_write.c
> @@ -396,6 +396,35 @@ static int bch2_write_index_default(struct bch_write_op *op)
>
> /* Writes */
>
> +void bch2_write_op_error_trans(struct btree_trans *trans, struct printbuf *out,
> + struct bch_write_op *op, u64 offset, const char *fmt, ...)
> +{
> + if (op->subvol)
> + lockrestart_do(trans,
> + bch2_inum_offset_err_msg_trans(trans, out,
> + (subvol_inum) { op->subvol, op->pos.inode, },
> + offset << 9));
> + else {
> + struct bpos pos = op->pos;
> + pos.offset = offset;
> + lockrestart_do(trans, bch2_inum_snap_offset_err_msg_trans(trans, out, pos));
> + }
> +
> + prt_str(out, "write error: ");
> +
> + va_list args;
> + va_start(args, fmt);
> + prt_vprintf(out, fmt, args);
> + va_end(args);
> +
> + if (op->flags & BCH_WRITE_move) {
> + struct data_update *u = container_of(op, struct data_update, op);
> +
> + prt_printf(out, "\n from internal move ");
> + bch2_bkey_val_to_text(out, op->c, bkey_i_to_s_c(u->k.k));
> + }
> +}
> +
> void bch2_write_op_error(struct printbuf *out, struct bch_write_op *op, u64 offset,
> const char *fmt, ...)
> {
> @@ -1214,8 +1243,8 @@ static void bch2_nocow_write_convert_unwritten(struct bch_write_op *op)
> struct bkey_i *insert = bch2_keylist_front(&op->insert_keys);
>
> struct printbuf buf = PRINTBUF;
> - bch2_write_op_error(&buf, op, bkey_start_offset(&insert->k),
> - "btree update error: %s", bch2_err_str(ret));
> + bch2_write_op_error_trans(trans, &buf, op, bkey_start_offset(&insert->k),
> + "btree update error: %s", bch2_err_str(ret));
> bch_err_ratelimited(c, "%s", buf.buf);
> printbuf_exit(&buf);
> }
> diff --git a/fs/bcachefs/io_write.h b/fs/bcachefs/io_write.h
> index 2d12ffb94736..bf942566a8eb 100644
> --- a/fs/bcachefs/io_write.h
> +++ b/fs/bcachefs/io_write.h
> @@ -20,6 +20,10 @@ static inline void bch2_latency_acct(struct bch_dev *ca, u64 submit_time, int rw
> void bch2_submit_wbio_replicas(struct bch_write_bio *, struct bch_fs *,
> enum bch_data_type, const struct bkey_i *, bool);
>
> +__printf(5, 6)
> +void bch2_write_op_error_trans(struct btree_trans *trans, struct printbuf *out,
> + struct bch_write_op *op, u64, const char *, ...);
> +
> __printf(4, 5)
> void bch2_write_op_error(struct printbuf *out, struct bch_write_op *op, u64,
> const char *, ...);
> --
> 2.47.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-02-12 17:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-12 17:29 [PATCH v2] bcachefs: Reuse transaction Alan Huang
2025-02-12 17:41 ` Kent Overstreet
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.