Re: SCSI bug

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

 



On 21.02.2016 22:09, John David Anglin wrote:
> On 2016-02-21, at 3:28 PM, James Bottomley wrote:
> 
>> That said, I still can't reproduce this, so you're going to have to
>> help me find it.  Current theory is ll_merge_request_fn() it looks like
>> there's scope for miscalculation in there.  Can you instrument this
>> line
>>
>> 	/* Merge is OK... */
>> 	req->nr_phys_segments = total_phys_segments;
>>
>> To add just before the return
>>
>> if (req->nr_phys_segments != __blk_recalc_rq_segments(rq->q, rq->bio,	false) 
>> 	printk("MISMATCH IN MERGE: got %d, should get %d\n", 
>> 		req->nr_phys_segments,
>> 		__blk_recalc_rq_segments(rq->q, rq->bio, false));
> 
> This didn't trigger.  There were some typos:

It didn't trigger for me either.

 
> diff --git a/block/blk-merge.c b/block/blk-merge.c
> index d9c3a75..e8969ef 100644
> --- a/block/blk-merge.c
> +++ b/block/blk-merge.c
> @@ -545,6 +545,12 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
>  
>         /* Merge is OK... */
>         req->nr_phys_segments = total_phys_segments;
> +
> +if (req->nr_phys_segments != __blk_recalc_rq_segments(req->q, req->bio,        false)) 
> +       printk("MISMATCH IN MERGE: got %d, should get %d\n", 
> +               req->nr_phys_segments,
> +               __blk_recalc_rq_segments(req->q, req->bio, false));
> +
>         return 1;
>  }

Interestingly it now triggered somewhere else...
I enabled CONFIG_DEBUG_SG, which I had enabled the last few times as well, but it now happened
for the first time:

[   49.848000] scsi_init_sgtable: nr_phys_segments = 4
[   49.848000] NEW SEGMENT sg = 00000000bbdd5008!!!
[   49.848000] __blk_segment_map_sg: length = 65536, nbytes = 4096, sum = 69632 > 65536
[   49.848000] __blk_segment_map_sg: BIOVEC_PHYS_MERGEABLE = 1, BIOVEC_SEG_BOUNDARY = 1
[   49.848000] NEW SEGMENT sg = 00000000bbdd5008!!!
[   49.848000] __blk_segment_map_sg: length = 8192, nbytes = 4096, sum = 12288 > 65536
[   49.848000] __blk_segment_map_sg: BIOVEC_PHYS_MERGEABLE = 0, BIOVEC_SEG_BOUNDARY = 1
[   49.848000] NEW SEGMENT sg = 00000000bbdd5008!!!
[   49.848000] __blk_segment_map_sg: length = 20480, nbytes = 4096, sum = 24576 > 65536
[   49.848000] __blk_segment_map_sg: BIOVEC_PHYS_MERGEABLE = 0, BIOVEC_SEG_BOUNDARY = 1
[   49.848000] NEW SEGMENT sg = 00000000bbdd5008!!!
[   49.848000] __blk_segment_map_sg: length = 4096, nbytes = 4096, sum = 8192 > 65536
[   49.848000] __blk_segment_map_sg: BIOVEC_PHYS_MERGEABLE = 0, BIOVEC_SEG_BOUNDARY = 1
[   49.848000] timer_interrupt(CPU 0): delayed! cycles 2D6DC985 rem 2B2FBB  next/now 19218A269E/19215EF6E3
[   50.980000] ------------[ cut here ]------------
[   51.036000] kernel BUG at /build/linux-4.4/linux-4.4.2/include/linux/scatterlist.h:92!
[   51.128000] CPU: 0 PID: 62 Comm: systemd-udevd Not tainted 4.4.0-1-parisc64-smp #6 Debian 4.4.2-2
[   51.236000] task: 00000000bbd49508 ti: 00000000bbdd4000 task.ti: 00000000bbdd4000
[   51.324000] 
[   51.344000]      YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI
[   51.400000] PSW: 00001000000001001111110100001110 Not tainted
[   51.468000] r00-03  000000ff0804fd0e 00000000bbdd5000 00000000404f23f8 00000000bbdd5000
[   51.564000] r04-07  00000000409b3b10 0000000000006000 0000000000001000 0000000000000180
[   51.660000] r08-11  0000000000000000 00000000bfdab0f0 0000000000000018 0000000000000000
[   51.756000] r12-15  0000000000000004 00000000bbe22e00 000000007faf3188 0000000000000000
[   51.852000] r16-19  0000000042004140 0000000000001000 0000000000000001 0000000087654321
[   51.948000] r20-23  000000020000c18c ffffffff87654000 00000000000002a9 00000000000002ee
[   52.044000] r24-27  0000000000000000 ffffffff87654000 00000000bbe22e80 00000000409b3b10
[   52.140000] r28-31  00000000bbe22e80 00000000bbdd5140 00000000bbdd5170 0000c18c0000c18c
[   52.236000] sr00-03  0000000000013800 0000000000000000 0000000000000000 0000000000011800
[   52.332000] sr04-07  0000000000000000 0000000000000000 0000000000000000 0000000000000000
[   52.428000] 
[   52.448000] IASQ: 0000000000000000 0000000000000000 IAOQ: 00000000404f2664 00000000404f2668
[   52.548000]  IIR: 03ffe01f    ISR: 0000000000000000  IOR: 000000000000005c
[   52.628000]  CPU:        0   CR30: 00000000bbdd4000 CR31: 00000000d20345e0
[   52.712000]  ORIG_R28: 0000000040b60718
[   52.756000]  IAOQ[0]: blk_rq_map_sg+0x6bc/0x7d0
[   52.812000]  IAOQ[1]: blk_rq_map_sg+0x6c0/0x7d0
[   52.864000]  RP(r2): blk_rq_map_sg+0x450/0x7d0
[   52.920000] Backtrace:
[   52.948000]  [<00000000003f5ebc>] scsi_init_sgtable+0x94/0x1b0 [scsi_mod]
[   53.028000]  [<00000000003f6044>] scsi_init_io+0x6c/0x258 [scsi_mod]
[   53.104000]  [<000000000080e078>] sd_init_command+0x70/0xec8 [sd_mod]
[   53.180000] scsi_init_sgtable: nr_phys_segments = 1
[   53.180000] scsi_init_sgtable: count = 1, nents = 1
[   53.300000] 
[   53.316000] CPU: 0 PID: 62 Comm: systemd-udevd Not tainted 4.4.0-1-parisc64-smp #6 Debian 4.4.2-2
[   53.424000] Backtrace:
[   53.452000]  [<0000000040215bd8>] show_stack+0x20/0x38
[   53.512000]  [<0000000040520a24>] dump_stack+0x9c/0x110
[   53.576000]  [<0000000040215dac>] die_if_kernel+0x19c/0x2e0
[   53.640000]  [<0000000040216c88>] handle_interruption+0x9a8/0x9d0
[   53.716000] 
[   53.732000] ---[ end trace 596bfe57ff9ccda5 ]---
[   53.788000] scsi_init_sgtable: nr_phys_segments = 1
[   53.788000] scsi_init_sgtable: count = 1, nents = 1

Helge
--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux