* Re: [PATCH v2] pstore/zone: Emit registration message as a single pr_info()
[not found] <20260426090929.1528232-1-kkartik@nvidia.com>
@ 2026-05-12 13:50 ` Jon Hunter
0 siblings, 0 replies; only message in thread
From: Jon Hunter @ 2026-05-12 13:50 UTC (permalink / raw)
To: Kartik Rajput, Kees Cook, Tony Luck, Guilherme G . Piccoli,
Thierry Reding, linux-kernel, linux-tegra
On 26/04/2026 10:09, Kartik Rajput wrote:
> register_pstore_zone() prints its "registered ... as backend for ..."
> summary as a pr_info() followed by several pr_cont() calls.
>
> pr_cont() is not atomic and has no log level of its own. It appends
> to whichever line was most recently opened by a printk(). If a
> pr_err() or pr_warn() from another CPU or an interrupt handler
> preempts the pr_info() / pr_cont() sequence, it closes the
> continuation between the fragments. This can cause parts of the
> pstore registration message to appear at the wrong log level and be
> interleaved with other messages.
>
> Furthermore, this causes the detection of new warning and error
> messages in the kernel log to be unreliable.
>
> Format the registration line into a seq_buf and emit it with a
> single pr_info() call, making the line atomic with respect to
> concurrent printk() callers. No functional change to registration.
>
> Signed-off-by: Kartik Rajput <kkartik@nvidia.com>
> ---
> Changes in v2:
> - Use a seq_buf to build the registration line instead of scnprintf()
> calls.
> - Link to v1: https://lore.kernel.org/all/20260424095820.1433700-1-kkartik@nvidia.com/
> ---
> fs/pstore/zone.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c
> index a3b003f9a3a0..004a5d5f376b 100644
> --- a/fs/pstore/zone.c
> +++ b/fs/pstore/zone.c
> @@ -12,6 +12,7 @@
> #include <linux/slab.h>
> #include <linux/mount.h>
> #include <linux/printk.h>
> +#include <linux/seq_buf.h>
> #include <linux/fs.h>
> #include <linux/pstore_zone.h>
> #include <linux/kdev_t.h>
> @@ -1301,6 +1302,10 @@ int register_pstore_zone(struct pstore_zone_info *info)
> {
> int err = -EINVAL;
> struct psz_context *cxt = &pstore_zone_cxt;
> + char buf[256];
> + struct seq_buf s;
> +
> + seq_buf_init(&s, buf, sizeof(buf));
>
> if (info->total_size < 4096) {
> pr_warn("total_size must be >= 4096\n");
> @@ -1383,30 +1388,28 @@ int register_pstore_zone(struct pstore_zone_info *info)
> }
> cxt->pstore.data = cxt;
>
> - pr_info("registered %s as backend for", info->name);
> cxt->pstore.max_reason = info->max_reason;
> cxt->pstore.name = info->name;
> if (info->kmsg_size) {
> cxt->pstore.flags |= PSTORE_FLAGS_DMESG;
> - pr_cont(" kmsg(%s",
> - kmsg_dump_reason_str(cxt->pstore.max_reason));
> - if (cxt->pstore_zone_info->panic_write)
> - pr_cont(",panic_write");
> - pr_cont(")");
> + seq_buf_printf(&s, " kmsg(%s%s)",
> + kmsg_dump_reason_str(cxt->pstore.max_reason),
> + cxt->pstore_zone_info->panic_write ? ",panic_write" : "");
> }
> if (info->pmsg_size) {
> cxt->pstore.flags |= PSTORE_FLAGS_PMSG;
> - pr_cont(" pmsg");
> + seq_buf_puts(&s, " pmsg");
> }
> if (info->console_size) {
> cxt->pstore.flags |= PSTORE_FLAGS_CONSOLE;
> - pr_cont(" console");
> + seq_buf_puts(&s, " console");
> }
> if (info->ftrace_size) {
> cxt->pstore.flags |= PSTORE_FLAGS_FTRACE;
> - pr_cont(" ftrace");
> + seq_buf_puts(&s, " ftrace");
> }
> - pr_cont("\n");
> +
> + pr_info("registered %s as backend for%s\n", info->name, seq_buf_str(&s));
>
> err = pstore_register(&cxt->pstore);
> if (err) {
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Jon
--
nvpublic
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-05-12 13:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260426090929.1528232-1-kkartik@nvidia.com>
2026-05-12 13:50 ` [PATCH v2] pstore/zone: Emit registration message as a single pr_info() Jon Hunter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox