Re: [PATCH v2 03/11] md/raid1,raid10: return actual write status in narrow_write_error

"Yu Kuai" <[email protected]>
Newsgroups gmane.linux.raid,gmane.linux.kernel
Organization fnnas
Message-ID <[email protected]>
Hi,

在 2025/11/10 19:56, Li Nan 写道:
>
>
> 在 2025/11/8 18:07, Yu Kuai 写道:
>> Hi,
>>
>> 在 2025/11/6 19:59, [email protected] 写道:
>>> From: Li Nan <[email protected]>
>>>
>>> narrow_write_error() currently returns true when setting badblocks 
>>> fails.
>>> Instead, return actual status of all retried writes, succeeding only 
>>> when
>>> all retried writes complete successfully. This gives upper layers 
>>> accurate
>>> information about write outcomes.
>>>
>>> When setting badblocks fails, mark the device as faulty and return 
>>> at once.
>>> No need to continue processing remaining sections in such cases.
>>>
>>> Signed-off-by: Li Nan <[email protected]>
>>> ---
>>>    drivers/md/raid1.c  | 17 +++++++++--------
>>>    drivers/md/raid10.c | 15 +++++++++------
>>>    2 files changed, 18 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
>>> index e65d104cb9c5..090fe8f71224 100644
>>> --- a/drivers/md/raid1.c
>>> +++ b/drivers/md/raid1.c
>>> @@ -2541,11 +2541,15 @@ static bool narrow_write_error(struct r1bio 
>>> *r1_bio, int i)
>>>            bio_trim(wbio, sector - r1_bio->sector, sectors);
>>>            wbio->bi_iter.bi_sector += rdev->data_offset;
>>>    -        if (submit_bio_wait(wbio) < 0)
>>> +        if (submit_bio_wait(wbio)) {
>>>                /* failure! */
>>> -            ok = rdev_set_badblocks(rdev, sector,
>>> -                        sectors, 0)
>>> -                && ok;
>>> +            ok = false;
>>> +            if (!rdev_set_badblocks(rdev, sector, sectors, 0)) {
>>> +                md_error(mddev, rdev);
>>> +                bio_put(wbio);
>>> +                break;
>>> +            }
>>> +        }
>>>               bio_put(wbio);
>>>            sect_to_write -= sectors;
>>> @@ -2596,10 +2600,7 @@ static void handle_write_finished(struct 
>>> r1conf *conf, struct r1bio *r1_bio)
>>>                 * errors.
>>>                 */
>>>                fail = true;
>>> -            if (!narrow_write_error(r1_bio, m))
>>> -                md_error(conf->mddev,
>>> -                     conf->mirrors[m].rdev);
>>> -                /* an I/O failed, we can't clear the bitmap */
>>> +            narrow_write_error(r1_bio, m);
>>
>> Now that return value is not used, you can make this helper void.
>>
>> Thanks,
>> Kuai
>>
>
> Hi, Kuai
>
> In v1, I changed return type of narrow_write_error() to void.
> But a better return value will help Akagi's fix:
> https://lore.kernel.org/all/[email protected]/ 
>
>
Please change to void now, people who want to use the return value later can
change return type

-- 
Thanks,
Kuai
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.