Re: [PATCH v3 05/13] md/raid1,raid10: support narrow_write_error when badblocks is disabled
"Yu Kuai" <[email protected]>
| Newsgroups | gmane.linux.raid,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
Hi, 在 2025/12/15 11:04, [email protected] 写道: > From: Li Nan <[email protected]> > > When badblocks.shift < 0 (badblocks disabled), narrow_write_error() > return false, preventing write error handling. Since narrow_write_error() > only splits IO into smaller sizes and re-submits, it can work with > badblocks disabled. > > Adjust to use the logical block size for block_sectors when badblocks is > disabled, allowing narrow_write_error() to function in this case. > > Signed-off-by: Li Nan <[email protected]> > Reviewed-by: Yu Kuai <[email protected]> > --- > drivers/md/raid1.c | 8 ++++---- > drivers/md/raid10.c | 8 ++++---- > 2 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c > index bd63cf039381..8e0312fad3a2 100644 > --- a/drivers/md/raid1.c > +++ b/drivers/md/raid1.c > @@ -2503,17 +2503,17 @@ static bool narrow_write_error(struct r1bio *r1_bio, int i) > * We currently own a reference on the rdev. > */ > > - int block_sectors; > + int block_sectors, lbs = bdev_logical_block_size(rdev->bdev) >> 9; > sector_t sector; > int sectors; > int sect_to_write = r1_bio->sectors; > bool ok = true; > > if (rdev->badblocks.shift < 0) > - return false; So, I just realize patch 3 missed this change, patch 3 itself is not correct in the case badblocks is not enabled. Please also move this patch before patch 3. > + block_sectors = lbs; > + else > + block_sectors = roundup(1 << rdev->badblocks.shift, lbs); > > - block_sectors = roundup(1 << rdev->badblocks.shift, > - bdev_logical_block_size(rdev->bdev) >> 9); > sector = r1_bio->sector; > sectors = ((sector + block_sectors) > & ~(sector_t)(block_sectors - 1)) > diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c > index db6fbd423726..e1f63f4f1384 100644 > --- a/drivers/md/raid10.c > +++ b/drivers/md/raid10.c > @@ -2790,17 +2790,17 @@ static bool narrow_write_error(struct r10bio *r10_bio, int i) > * We currently own a reference to the rdev. > */ > > - int block_sectors; > + int block_sectors, lbs = bdev_logical_block_size(rdev->bdev) >> 9; > sector_t sector; > int sectors; > int sect_to_write = r10_bio->sectors; > bool ok = true; > > if (rdev->badblocks.shift < 0) > - return false; > + block_sectors = lbs; > + else > + block_sectors = roundup(1 << rdev->badblocks.shift, lbs); > > - block_sectors = roundup(1 << rdev->badblocks.shift, > - bdev_logical_block_size(rdev->bdev) >> 9); > sector = r10_bio->sector; > sectors = ((r10_bio->sector + block_sectors) > & ~(sector_t)(block_sectors - 1)) -- Thansk, Kuai