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
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.