Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Chris Mason <clm@meta.com>, Christoph Hellwig <hch@lst.de>
Cc: Chris Mason <clm@fb.com>,
	linux-btrfs@vger.kernel.org, dsterba@suse.com,
	josef@toxicpanda.com
Subject: Re: [PATCH RFC] Btrfs: only subtract from len_to_oe_boundary when it is tracking an extent
Date: Tue, 1 Aug 2023 08:58:51 +0800	[thread overview]
Message-ID: <d607847b-afab-2748-8a4f-0e675ab78db9@gmx.com> (raw)
In-Reply-To: <c059da8d-b5d5-20bd-fadb-c6c241323cc1@meta.com>



On 2023/8/1 02:10, Chris Mason wrote:
> On 7/31/23 3:02 AM, Christoph Hellwig wrote:
>> On Mon, Jul 31, 2023 at 10:27:02AM +0800, Qu Wenruo wrote:
>>> Personally speaking, I think we'd better moving the ordered extent based
>>> split (only for zoned devices) to btrfs bio layer.
>>
>> That goes completely counter the direction I've been working to.  The
>> ordered extent is the "container" for writeback, so having a bio
>> that spawns them creates all kinds of problems.  Thats's the reason
>> why we now have a bbio->ordered pointer now.
>>
>>> Another concern is, how we could hit a bio which has a size larger than
>>> U32_MAX?
>>>
>>> The bio->bi_iter.size is only unsigned int, it should never exceed U32_MAX.
>>>
>>> It would help a lot if you can provide a backtrace of such unaligned bio.
>>
>> That's indeed a bit weird.
>>
>
> bio_full() is using a slightly different test:
>
>          if (bio->bi_iter.bi_size > UINT_MAX - len)
>                  return true;
>
> We're doing:
>
>                  /* Cap to the current ordered extent boundary if there is one. */
>                  if (len > bio_ctrl->len_to_oe_boundary) {
>                          ASSERT(bio_ctrl->compress_type == BTRFS_COMPRESS_NONE);
>                          ASSERT(is_data_inode(&inode->vfs_inode));
>                          len = bio_ctrl->len_to_oe_boundary;
>                  }
>
> The end result of this is that when we get to a
> bio sized U32_MAX - PAGE_SIZE, both our len_to_oe_boundary and the
> bio_add_page() check will correctly decide we can only fit 4095 bytes.

Thanks for the details, now I can understand where the problem is.

Mind to add above explanation into the commit message?
Otherwise the fix looks good to me.

Thanks,
Qu
>
> The difference is bio_add_page() would just say no triggering bio
> submission.  But submit_extent_page()'s check is first, cutting the
> IO down to 4095 bytes instead.
>
> (I do have the stack trace, it's just a boring filemap_fdata_write_and_wait() path off of file release)
>
> -chris
>

  reply	other threads:[~2023-08-01  0:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-30 19:02 [PATCH RFC] Btrfs: only subtract from len_to_oe_boundary when it is tracking an extent Chris Mason
2023-07-30 20:27 ` Sweet Tea Dorminy
2023-07-31 19:22   ` Chris Mason
2023-08-01  2:59     ` Sweet Tea Dorminy
2023-07-31  2:27 ` Qu Wenruo
2023-07-31  7:02   ` Christoph Hellwig
2023-07-31 18:10     ` Chris Mason
2023-08-01  0:58       ` Qu Wenruo [this message]
2023-07-31  7:00 ` Christoph Hellwig
2023-07-31 18:52   ` Chris Mason
2023-07-31 19:35     ` Christoph Hellwig
2023-07-31 21:05       ` Chris Mason

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=d607847b-afab-2748-8a4f-0e675ab78db9@gmx.com \
    --to=quwenruo.btrfs@gmx.com \
    --cc=clm@fb.com \
    --cc=clm@meta.com \
    --cc=dsterba@suse.com \
    --cc=hch@lst.de \
    --cc=josef@toxicpanda.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox