diff mbox

kernel BUG at block/bio.c:1787! while initializing scsi_debug on ppc64 host

Message ID 20151215233841.522d4bf0@tom-T450 (mailing list archive)
State New, archived
Headers show

Commit Message

Ming Lei Dec. 15, 2015, 3:38 p.m. UTC
On Tue, 15 Dec 2015 21:06:31 +0800
Eryu Guan <guaneryu@gmail.com> wrote:

> On Tue, Dec 15, 2015 at 08:06:47PM +0800, Ming Lei wrote:
> > On Tue, Dec 15, 2015 at 7:20 PM, Eryu Guan <guaneryu@gmail.com> wrote:
> > > On Fri, Dec 11, 2015 at 07:53:40PM +0800, Eryu Guan wrote:
> > >> Hi,
> > >>
> > >> I saw this kernel BUG_ON on 4.4-rc4 kernel, and this can be reproduced
> > >> easily on ppc64 host by:
> > >
> > > This is still reproducible with 4.4-rc5 kernel.
> > 
> > Could you capture the debug log after appyling the attached patch and
> > the reproduction?
> 
> Thanks for looking into this! dmesg shows:
> 
> [  686.217682] bio_split: sectors 0, bio_sectors 128, bi_rw 0

I guess the following patch should fix the issue, and ca369d51b3
uses OPTIMAL TRANSFER LENGTH to set limits->max_sectors, which
may be less than one page size.

I don't understand the idea behind this change, Martin, could
you explain it a bit?

---

Comments

Eryu Guan Dec. 15, 2015, 5:16 p.m. UTC | #1
On Tue, Dec 15, 2015 at 11:38:41PM +0800, Ming Lei wrote:
> On Tue, 15 Dec 2015 21:06:31 +0800
> Eryu Guan <guaneryu@gmail.com> wrote:
> 
> > On Tue, Dec 15, 2015 at 08:06:47PM +0800, Ming Lei wrote:
> > > On Tue, Dec 15, 2015 at 7:20 PM, Eryu Guan <guaneryu@gmail.com> wrote:
> > > > On Fri, Dec 11, 2015 at 07:53:40PM +0800, Eryu Guan wrote:
> > > >> Hi,
> > > >>
> > > >> I saw this kernel BUG_ON on 4.4-rc4 kernel, and this can be reproduced
> > > >> easily on ppc64 host by:
> > > >
> > > > This is still reproducible with 4.4-rc5 kernel.
> > > 
> > > Could you capture the debug log after appyling the attached patch and
> > > the reproduction?
> > 
> > Thanks for looking into this! dmesg shows:
> > 
> > [  686.217682] bio_split: sectors 0, bio_sectors 128, bi_rw 0
> 
> I guess the following patch should fix the issue, and ca369d51b3
> uses OPTIMAL TRANSFER LENGTH to set limits->max_sectors, which
> may be less than one page size.
> 
> I don't understand the idea behind this change, Martin, could
> you explain it a bit?
> 
> ---
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
> index 3d22fc3..d66d362 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -2889,10 +2889,11 @@ static int sd_revalidate_disk(struct gendisk *disk)
>  	 */
>  	if (sdkp->opt_xfer_blocks && sdkp->opt_xfer_blocks <= dev_max &&
>  	    sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS)
> -		rw_max = q->limits.io_opt =
> +		q->limits.io_opt =
>  			logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
> -	else
> -		rw_max = BLK_DEF_MAX_SECTORS;
> +
> +	rw_max = min_t(unsigned, BLK_DEF_MAX_SECTORS,
> +		       q->limits.max_dev_sectors);
>  
>  	/* Combine with controller limits */
>  	q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q));

I tested this patch and no BUG_ON this time, the debug messages are not
triggered either.

Thanks,
Eryu
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 3d22fc3..d66d362 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -2889,10 +2889,11 @@  static int sd_revalidate_disk(struct gendisk *disk)
 	 */
 	if (sdkp->opt_xfer_blocks && sdkp->opt_xfer_blocks <= dev_max &&
 	    sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS)
-		rw_max = q->limits.io_opt =
+		q->limits.io_opt =
 			logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
-	else
-		rw_max = BLK_DEF_MAX_SECTORS;
+
+	rw_max = min_t(unsigned, BLK_DEF_MAX_SECTORS,
+		       q->limits.max_dev_sectors);
 
 	/* Combine with controller limits */
 	q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q));