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: 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; } Any more ideas? Dave -- John David Anglin dave.anglin@xxxxxxxx -- 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