diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-02-07 13:37:30 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-02-07 14:50:25 -0500 |
commit | cfc16c9985efb6466eca4220004471a25f33707b (patch) | |
tree | e58b31bb46e960c9319adab625ae5e7b83b41b24 | |
parent | 809ebe1f374e986934184c8905b1f2a16358f65d (diff) |
bcachefs: bch2_inum_offset_err_msg_trans() no longer handles transaction restarts
we're starting to use error messages with paths in fsck_errors(), where
we do not want nested transaction restart handling, so let's prepare for
that.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/error.c | 48 | ||||
-rw-r--r-- | fs/bcachefs/error.h | 3 | ||||
-rw-r--r-- | fs/bcachefs/fs-io-buffered.c | 3 | ||||
-rw-r--r-- | fs/bcachefs/io_misc.c | 3 | ||||
-rw-r--r-- | fs/bcachefs/io_read.c | 11 |
5 files changed, 29 insertions, 39 deletions
diff --git a/fs/bcachefs/error.c b/fs/bcachefs/error.c index 14cfcfa39590..c8fc58fab958 100644 --- a/fs/bcachefs/error.c +++ b/fs/bcachefs/error.c @@ -530,42 +530,33 @@ void bch2_flush_fsck_errs(struct bch_fs *c) mutex_unlock(&c->fsck_error_msgs_lock); } -int bch2_inum_err_msg_trans(struct btree_trans *trans, struct printbuf *out, subvol_inum inum) +int bch2_inum_offset_err_msg_trans(struct btree_trans *trans, struct printbuf *out, + subvol_inum inum, u64 offset) { u32 restart_count = trans->restart_count; int ret = 0; - if (inum.subvol) - ret = lockrestart_do(trans, bch2_inum_to_path(trans, inum, out)); + if (inum.subvol) { + ret = bch2_inum_to_path(trans, inum, out); + if (bch2_err_matches(ret, BCH_ERR_transaction_restart)) + return ret; + } if (!inum.subvol || ret) prt_printf(out, "inum %llu:%llu", inum.subvol, inum.inum); - - return trans_was_restarted(trans, restart_count); -} - -int bch2_inum_offset_err_msg_trans(struct btree_trans *trans, struct printbuf *out, - subvol_inum inum, u64 offset) -{ - int ret = bch2_inum_err_msg_trans(trans, out, inum); prt_printf(out, " offset %llu: ", offset); - return ret; -} -void bch2_inum_err_msg(struct bch_fs *c, struct printbuf *out, subvol_inum inum) -{ - bch2_trans_run(c, bch2_inum_err_msg_trans(trans, out, inum)); + return trans_was_restarted(trans, restart_count); } void bch2_inum_offset_err_msg(struct bch_fs *c, struct printbuf *out, subvol_inum inum, u64 offset) { - bch2_trans_run(c, bch2_inum_offset_err_msg_trans(trans, out, inum, offset)); + bch2_trans_do(c, bch2_inum_offset_err_msg_trans(trans, out, inum, offset)); } -int bch2_inum_snap_err_msg_trans(struct btree_trans *trans, struct printbuf *out, - struct bpos pos) +int bch2_inum_snap_offset_err_msg_trans(struct btree_trans *trans, struct printbuf *out, + struct bpos pos) { - u32 restart_count = trans->restart_count; struct bch_fs *c = trans->c; int ret = 0; @@ -577,18 +568,15 @@ int bch2_inum_snap_err_msg_trans(struct btree_trans *trans, struct printbuf *out .inum = pos.inode, }; - if (inum.subvol) - ret = lockrestart_do(trans, bch2_inum_to_path(trans, inum, out)); + if (inum.subvol) { + ret = bch2_inum_to_path(trans, inum, out); + if (bch2_err_matches(ret, BCH_ERR_transaction_restart)) + return ret; + } + if (!inum.subvol || ret) prt_printf(out, "inum %llu:%u", pos.inode, pos.snapshot); - return trans_was_restarted(trans, restart_count); -} - -int bch2_inum_snap_offset_err_msg_trans(struct btree_trans *trans, struct printbuf *out, - struct bpos pos) -{ - int ret = bch2_inum_snap_err_msg_trans(trans, out, pos); prt_printf(out, " offset %llu: ", pos.offset << 8); - return ret; + return 0; } diff --git a/fs/bcachefs/error.h b/fs/bcachefs/error.h index 95cf48a31dbf..76da0e88cee8 100644 --- a/fs/bcachefs/error.h +++ b/fs/bcachefs/error.h @@ -238,13 +238,10 @@ void bch2_io_error(struct bch_dev *, enum bch_member_error_type); _ret; \ }) -int bch2_inum_err_msg_trans(struct btree_trans *, struct printbuf *, subvol_inum); int bch2_inum_offset_err_msg_trans(struct btree_trans *, struct printbuf *, subvol_inum, u64); -void bch2_inum_err_msg(struct bch_fs *, struct printbuf *, subvol_inum); void bch2_inum_offset_err_msg(struct bch_fs *, struct printbuf *, subvol_inum, u64); -int bch2_inum_snap_err_msg_trans(struct btree_trans *, struct printbuf *, struct bpos); int bch2_inum_snap_offset_err_msg_trans(struct btree_trans *, struct printbuf *, struct bpos); #endif /* _BCACHEFS_ERROR_H */ diff --git a/fs/bcachefs/fs-io-buffered.c b/fs/bcachefs/fs-io-buffered.c index 83e15908250d..a1ccb9139b04 100644 --- a/fs/bcachefs/fs-io-buffered.c +++ b/fs/bcachefs/fs-io-buffered.c @@ -230,7 +230,8 @@ err: if (ret) { struct printbuf buf = PRINTBUF; - bch2_inum_offset_err_msg_trans(trans, &buf, inum, iter.pos.offset << 9); + lockrestart_do(trans, + bch2_inum_offset_err_msg_trans(trans, &buf, inum, iter.pos.offset << 9)); prt_printf(&buf, "read error %i from btree lookup", ret); bch_err_ratelimited(c, "%s", buf.buf); printbuf_exit(&buf); diff --git a/fs/bcachefs/io_misc.c b/fs/bcachefs/io_misc.c index 5353979117b0..6b842c8d21be 100644 --- a/fs/bcachefs/io_misc.c +++ b/fs/bcachefs/io_misc.c @@ -115,7 +115,8 @@ err: bch2_increment_clock(c, sectors_allocated, WRITE); if (should_print_err(ret)) { struct printbuf buf = PRINTBUF; - bch2_inum_offset_err_msg_trans(trans, &buf, inum, iter->pos.offset << 9); + lockrestart_do(trans, + bch2_inum_offset_err_msg_trans(trans, &buf, inum, iter->pos.offset << 9)); prt_printf(&buf, "fallocate error: %s", bch2_err_str(ret)); bch_err_ratelimited(c, "%s", buf.buf); printbuf_exit(&buf); diff --git a/fs/bcachefs/io_read.c b/fs/bcachefs/io_read.c index 99ff8630cbf2..821ff222b361 100644 --- a/fs/bcachefs/io_read.c +++ b/fs/bcachefs/io_read.c @@ -329,9 +329,10 @@ nopromote: static int bch2_read_err_msg_trans(struct btree_trans *trans, struct printbuf *out, struct bch_read_bio *rbio, struct bpos read_pos) { - return bch2_inum_offset_err_msg_trans(trans, out, - (subvol_inum) { rbio->subvol, read_pos.inode }, - read_pos.offset << 9); + return lockrestart_do(trans, + bch2_inum_offset_err_msg_trans(trans, out, + (subvol_inum) { rbio->subvol, read_pos.inode }, + read_pos.offset << 9)); } static void bch2_read_err_msg(struct bch_fs *c, struct printbuf *out, @@ -1279,7 +1280,9 @@ err: if (ret) { struct printbuf buf = PRINTBUF; - bch2_inum_offset_err_msg_trans(trans, &buf, inum, bvec_iter.bi_sector << 9); + lockrestart_do(trans, + bch2_inum_offset_err_msg_trans(trans, &buf, inum, + bvec_iter.bi_sector << 9)); prt_printf(&buf, "read error %i from btree lookup", ret); bch_err_ratelimited(c, "%s", buf.buf); printbuf_exit(&buf); |