Re: FAILED: patch "[PATCH] RAID10: ignore discard error" failed to apply to 4.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 09, 2016 at 09:58:44AM +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote:
> 
> The patch below does not apply to the 4.4-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@xxxxxxxxxxxxxxx>.

Well, it applied, but it broke the build, so I dropped it.

thanks,

greg k-h


> ------------------ original commit in Linus's tree ------------------
> 
> >From 579ed34f7b751b8add233cba4cf755258dbdd60a Mon Sep 17 00:00:00 2001
> From: Shaohua Li <shli@xxxxxx>
> Date: Thu, 6 Oct 2016 14:13:52 -0700
> Subject: [PATCH] RAID10: ignore discard error
> 
> This is the counterpart of raid10 fix. If a write error occurs, raid10
> will try to rewrite the bio in small chunk size. If the rewrite fails,
> raid10 will record the error in bad block. narrow_write_error will
> always use WRITE for the bio, but actually it could be a discard. Since
> discard bio hasn't payload, write the bio will cause different issues.
> But discard error isn't fatal, we can safely ignore it. This is what
> this patch does.
> 
> This issue should exist since discard is added, but only exposed with
> recent arbitrary bio size feature.
> 
> Cc: Sitsofe Wheeler <sitsofe@xxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx (v3.6)
> Signed-off-by: Shaohua Li <shli@xxxxxx>
> 
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index be1a9fca3b2d..39fddda2fef2 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -447,6 +447,9 @@ static void raid10_end_write_request(struct bio *bio)
>  	struct r10conf *conf = r10_bio->mddev->private;
>  	int slot, repl;
>  	struct md_rdev *rdev = NULL;
> +	bool discard_error;
> +
> +	discard_error = bio->bi_error && bio_op(bio) == REQ_OP_DISCARD;
>  
>  	dev = find_bio_disk(conf, r10_bio, bio, &slot, &repl);
>  
> @@ -460,7 +463,7 @@ static void raid10_end_write_request(struct bio *bio)
>  	/*
>  	 * this branch is our 'one mirror IO has finished' event handler:
>  	 */
> -	if (bio->bi_error) {
> +	if (bio->bi_error && !discard_error) {
>  		if (repl)
>  			/* Never record new bad blocks to replacement,
>  			 * just fail it.
> @@ -503,7 +506,7 @@ static void raid10_end_write_request(struct bio *bio)
>  		if (is_badblock(rdev,
>  				r10_bio->devs[slot].addr,
>  				r10_bio->sectors,
> -				&first_bad, &bad_sectors)) {
> +				&first_bad, &bad_sectors) && !discard_error) {
>  			bio_put(bio);
>  			if (repl)
>  				r10_bio->devs[slot].repl_bio = IO_MADE_GOOD;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]