Re: Patch "md: avoid deadlock when md_set_badblocks." has been added to the 3.4-stable tree

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

 



> This bug was introduce in commit  2e8ac30312973dd20e68073653
> (the first time rdev_set_badblock was call from interrupt context),
> so this patch is appropriate for 3.5 and subsequent kernels.
> 

While this patch is harmless for 3.4, the changelog does say
it is for 3.5+.

> Signed-off-by: Bian Yu <bianyu@xxxxxxxxxxx>
> Reviewed-by: Jianpeng Ma <majianpeng@xxxxxxxxx>
> Signed-off-by: NeilBrown <neilb@xxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> 
> ---
>  drivers/md/md.c |    5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -7780,6 +7780,7 @@ static int md_set_badblocks(struct badbl
>  	u64 *p;
>  	int lo, hi;
>  	int rv = 1;
> +	unsigned long flags;
>  
>  	if (bb->shift < 0)
>  		/* badblocks are disabled */
> @@ -7794,7 +7795,7 @@ static int md_set_badblocks(struct badbl
>  		sectors = next - s;
>  	}
>  
> -	write_seqlock_irq(&bb->lock);
> +	write_seqlock_irqsave(&bb->lock, flags);
>  
>  	p = bb->page;
>  	lo = 0;
> @@ -7910,7 +7911,7 @@ static int md_set_badblocks(struct badbl
>  	bb->changed = 1;
>  	if (!acknowledged)
>  		bb->unacked_exist = 1;
> -	write_sequnlock_irq(&bb->lock);
> +	write_sequnlock_irqrestore(&bb->lock, flags);
>  
>  	return rv;
>  }
> 

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