From: David Sterba <dsterba@suse.cz>
To: Boris Burkov <boris@bur.io>
Cc: linux-btrfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH v2] btrfs: try to search for data csums in commit root
Date: Mon, 14 Oct 2024 17:16:03 +0200 [thread overview]
Message-ID: <20241014151603.GC1609@suse.cz> (raw)
In-Reply-To: <20241011194831.GA2832667@zen.localdomain>
On Fri, Oct 11, 2024 at 12:48:31PM -0700, Boris Burkov wrote:
> > Can you please find another way how to store this? Maybe the bio flags
> > have some bits free. Otherwise this adds 8 bytes to btrfs_bio, while
> > this structure should be optimized for size. It's ok to use bool for
> > simplicity in the first versions when you're testing the locking.
>
> Ooh, good point!
>
> I started looking into it some more and it's tricky but I have a few
> ideas, curious what you think:
>
> 1. Export the btrfs_bio_ctrl and optionally wire it through the
> callstack. For data reads it is still live on the stack, we just can't
> be sure that containerof will work in general. Or just wire the bool
> through the calls. This is pretty "trivial" but also ugly.
> 2. We already allocate an io context in multi-device scenarios. we could
> allocate a smaller one for single. That doesn't seem that different
> than adding a flags to btrfs_bio.
> 3. Figure out how to stuff it into struct btrfs_bio. For example, I
> think we aren't using btrfs_bio->private until later, so we could put
> a to-be-overwritten submit control struct in there.
Maybe this could work but seems fragile as the private pointer is used
for other strucutres and purposes. All in a void pointer. We need to
store only a single bit of information, so this can work with some stub
pointer type that can be at least recognized when mistakenly
dereference.
> 4. Figure out how to stuff it into struct bio. This would be your
> bi_flags idea. However, I'm confused how to do that safely. Doesn't
> the block layer own those bits? It seems aggressive for me to try
> to use them. bio has a bi_private as well, which might be unset in
> the context we care about.
#define BTRFS_BIO_FLAG_SEARCH_COMMIT_ROOT (1U << (BIO_FLAG_LAST + 1)
I don't see any code in block/* that would verify the bio bits. Also the
REQ_ bits could be used, we already do that with REQ_BTRFS_CGROUP_PUNT
and at some point the REQ_DRV was used (removed in a39da514eba81e687db).
> I'm leaning towards option 3: taking advantage of the yet unset
> btrfs_bio->private
next prev parent reply other threads:[~2024-10-14 15:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-08 19:36 [PATCH v2] btrfs: try to search for data csums in commit root Boris Burkov
2024-10-11 17:46 ` David Sterba
2024-10-11 19:48 ` Boris Burkov
2024-10-14 15:16 ` David Sterba [this message]
2024-10-14 17:02 ` Boris Burkov
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=20241014151603.GC1609@suse.cz \
--to=dsterba@suse.cz \
--cc=boris@bur.io \
--cc=kernel-team@fb.com \
--cc=linux-btrfs@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.