All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: Kent Overstreet <kent.overstreet@linux.dev>
Cc: linux-bcachefs@vger.kernel.org, djwong@kernel.org
Subject: Re: [PATCH 2/6] bcachefs: Add ability to redirect log output
Date: Fri, 8 Dec 2023 15:24:13 -0500	[thread overview]
Message-ID: <ZXN7bctKO+Rc/pm4@bfoster> (raw)
In-Reply-To: <20231206203313.2197302-3-kent.overstreet@linux.dev>

On Wed, Dec 06, 2023 at 03:33:06PM -0500, Kent Overstreet wrote:
> Upcoming patches are going to add two new ioctls for running fsck in the
> kernel, but pretending that we're running our normal userspace fsck.
> 
> This patch adds some plumbing for redirecting our normal log messages
> away from the dmesg log to a thread_with_file file descriptor - via a
> struct log_output, which will be consumed by the fsck f_op's read method.
> 
> The new ioctls will allow for running fsck in the kernel against an
> offline filesystem (without mounting it), and an online filesystem. For
> an offline filesystem we need a way to pass in a pointer to the
> log_output, which is done via a new hidden opts.h option.
> 
> For online fsck, we can set c->output directly, but only want to
> redirect log messages from the thread running fsck - hence the new
> c->output_filter method.
> 
> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
> ---
>  fs/bcachefs/bcachefs.h | 54 +++++++++++++++++++++++++++++++-----------
>  fs/bcachefs/opts.h     |  5 ++++
>  fs/bcachefs/super.c    | 28 ++++++++++++++++++++++
>  3 files changed, 73 insertions(+), 14 deletions(-)
> 
...
> diff --git a/fs/bcachefs/opts.h b/fs/bcachefs/opts.h
> index 8526f177450a..91026dfb8c83 100644
> --- a/fs/bcachefs/opts.h
> +++ b/fs/bcachefs/opts.h
> @@ -419,6 +419,11 @@ enum fsck_err_opts {
>  	  OPT_BOOL(),							\
>  	  BCH2_NO_SB_OPT,		false,				\
>  	  NULL,		"Allocate the buckets_nouse bitmap")		\
> +	x(log_output,			u64,				\
> +	  0,								\
> +	  OPT_UINT(0, S64_MAX),						\
> +	  BCH2_NO_SB_OPT,		false,				\
> +	  NULL,		"Allocate the buckets_nouse bitmap")		\

I assume you want to update the string to something more related. :)

Brian

>  	x(project,			u8,				\
>  	  OPT_INODE,							\
>  	  OPT_BOOL(),							\
> diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c
> index e7f186b45df1..6c320defd593 100644
> --- a/fs/bcachefs/super.c
> +++ b/fs/bcachefs/super.c
> @@ -80,6 +80,32 @@ const char * const bch2_fs_flag_strs[] = {
>  	NULL
>  };
>  
> +void __bch2_print(struct bch_fs *c, const char *fmt, ...)
> +{
> +	struct log_output *output = c->output;
> +	va_list args;
> +
> +	if (c->output_filter && c->output_filter != current)
> +		output = NULL;
> +
> +	va_start(args, fmt);
> +	if (likely(!output)) {
> +		vprintk(fmt, args);
> +	} else {
> +		unsigned long flags;
> +
> +		if (fmt[0] == KERN_SOH[0])
> +			fmt += 2;
> +
> +		spin_lock_irqsave(&output->lock, flags);
> +		prt_vprintf(&output->buf, fmt, args);
> +		spin_unlock_irqrestore(&output->lock, flags);
> +
> +		wake_up(&output->wait);
> +	}
> +	va_end(args);
> +}
> +
>  #define KTYPE(type)							\
>  static const struct attribute_group type ## _group = {			\
>  	.attrs = type ## _files						\
> @@ -703,6 +729,8 @@ static struct bch_fs *bch2_fs_alloc(struct bch_sb *sb, struct bch_opts opts)
>  		goto out;
>  	}
>  
> +	c->output = (void *)(unsigned long) opts.log_output;
> +
>  	__module_get(THIS_MODULE);
>  
>  	closure_init(&c->cl, NULL);
> -- 
> 2.42.0
> 
> 


  reply	other threads:[~2023-12-08 20:23 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-06 20:33 [PATCH 0/6] [RFC WIP] bcachefs: online fsck Kent Overstreet
2023-12-06 20:33 ` [PATCH 1/6] bcachefs: thread_with_file Kent Overstreet
2023-12-06 20:33 ` [PATCH 2/6] bcachefs: Add ability to redirect log output Kent Overstreet
2023-12-08 20:24   ` Brian Foster [this message]
2023-12-08 20:35     ` Kent Overstreet
2023-12-06 20:33 ` [PATCH 3/6] bcachefs: Mark recovery passses that are safe to run online Kent Overstreet
2023-12-06 20:33 ` [PATCH 4/6] bcachefs: bch2_run_online_recovery_passes() Kent Overstreet
2023-12-08 20:25   ` Brian Foster
2023-12-08 20:34     ` Kent Overstreet
2023-12-06 20:33 ` [PATCH 5/6] bcachefs: BCH_IOCTL_FSCK_OFFLINE Kent Overstreet
2023-12-08 20:26   ` Brian Foster
2023-12-08 20:33     ` Kent Overstreet
2023-12-06 20:33 ` [PATCH 6/6] bcachefs: BCH_IOCTL_FSCK_ONLINE Kent Overstreet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZXN7bctKO+Rc/pm4@bfoster \
    --to=bfoster@redhat.com \
    --cc=djwong@kernel.org \
    --cc=kent.overstreet@linux.dev \
    --cc=linux-bcachefs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.