[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d23ba315-c197-0e3a-88a9-8e71a93637c0@huaweicloud.com>
Date: Wed, 3 Sep 2025 09:41:18 +0800
From: Yu Kuai <yukuai1@...weicloud.com>
To: Bart Van Assche <bvanassche@....org>, Yu Kuai <yukuai1@...weicloud.com>,
hch@...radead.org, colyli@...nel.org, hare@...e.de, dlemoal@...nel.org,
tieren@...as.com, axboe@...nel.dk, tj@...nel.org, josef@...icpanda.com,
song@...nel.org, kmo@...erainc.com, satyat@...gle.com, ebiggers@...gle.com,
neil@...wn.name, akpm@...ux-foundation.org
Cc: linux-block@...r.kernel.org, linux-kernel@...r.kernel.org,
cgroups@...r.kernel.org, linux-raid@...r.kernel.org, yi.zhang@...wei.com,
yangerkun@...wei.com, johnny.chenyi@...wei.com,
"yukuai (C)" <yukuai3@...wei.com>
Subject: Re: [PATCH RFC v3 14/15] block: fix disordered IO in the case
recursive split
Hi,
在 2025/09/03 9:12, Bart Van Assche 写道:
> On 9/2/25 6:00 PM, Yu Kuai wrote:
>> Hi,
>>
>> 在 2025/09/03 1:20, Bart Van Assche 写道:
>>> On 8/31/25 8:32 PM, Yu Kuai wrote:
>>>> -void submit_bio_noacct_nocheck(struct bio *bio)
>>>> +void submit_bio_noacct_nocheck(struct bio *bio, bool split)
>>>> {
>>>> blk_cgroup_bio_start(bio);
>>>> blkcg_bio_issue_init(bio);
>>>> @@ -745,12 +745,16 @@ void submit_bio_noacct_nocheck(struct bio *bio)
>>>> * to collect a list of requests submited by a ->submit_bio
>>>> method while
>>>> * it is active, and then process them after it returned.
>>>> */
>>>> - if (current->bio_list)
>>>> - bio_list_add(¤t->bio_list[0], bio);
>>>> - else if (!bdev_test_flag(bio->bi_bdev, BD_HAS_SUBMIT_BIO))
>>>> + if (current->bio_list) {
>>>> + if (split && !bdev_is_zoned(bio->bi_bdev))
>>>> + bio_list_add_head(¤t->bio_list[0], bio);
>>>> + else
>>>> + bio_list_add(¤t->bio_list[0], bio);
>>>
>>> The above change will cause write errors for zoned block devices. As I
>>> have shown before, also for zoned block devices, if a bio is split
>>> insertion must happen at the head of the list. See e.g.
>>> "Re: [PATCH 1/2] block: Make __submit_bio_noacct() preserve the bio
>>> submission order"
>>> (https://lore.kernel.org/linux-block/a0c89df8-4b33-409c-ba43-
>>> f9543fb1b091@....org/)
>>
>> Do you mean we should remove the bdev_is_zoned() checking? I added this
>> checking because I'm not quite sure about details in zone device, and
>> this checking is aimed at prevent functional changes in zone device.
>
> Yes, the bdev_is_zoned() check should be removed. I spent a significant
> amount of time on root-causing and proposing fixes for write errors
> caused by recursive bio splitting for zoned devices. What I learned by
> analyzing these write errors is the basis for this feedback.
>
>> So I don't think this change will cause write errors, the write errors
>> should already exist before this set, right?
>
> Agreed. Although I haven't checked this yet, if the bdev_is_zoned()
> check is removed from this patch, this patch should fix the write errors
> triggered by stacking a dm driver on top of a zoned block device if
> inline encryption is enabled.
>
Ok, I'll remove the checking and mention this problem in the next formal
version.
Thanks,
Kuai
> Thanks,
>
> Bart.
> .
>
Powered by blists - more mailing lists