Messages in this thread |  | | From | "Yu Kuai" <> | | Subject | Re: [PATCH v2 03/11] md/raid1,raid10: return actual write status in narrow_write_error | | Date | Fri, 28 Nov 2025 10:45:50 +0800 |
| |
Hi,
在 2025/11/10 19:56, Li Nan 写道: > > > 在 2025/11/8 18:07, Yu Kuai 写道: >> Hi, >> >> 在 2025/11/6 19:59, linan666@huaweicloud.com 写道: >>> From: Li Nan <linan122@huawei.com> >>> >>> 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 <linan122@huawei.com> >>> --- >>> 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/8136b746-50c9-51eb-483b-f2661e86d3eb@huaweicloud.com/ > > Please change to void now, people who want to use the return value later can change return type
-- Thanks, Kuai |  |