[dm-devel] [PATCH v3 0/8] dm: add request-based blk-mq support

Mike Snitzer snitzer at redhat.com
Wed Dec 24 19:26:43 UTC 2014


On Wed, Dec 24 2014 at  1:55pm -0500,
Mike Snitzer <snitzer at redhat.com> wrote:

> On Wed, Dec 24 2014 at  1:21pm -0500,
> Mike Snitzer <snitzer at redhat.com> wrote:
> 
> > This is odd considering blk-mq defaults to setting QUEUE_FLAG_IO_STAT,
> > so each request will have REQ_IO_STAT set.
> > 
> > I'm not sure what would account for this NULL pointer (my code appears
> > to be slightly different than yours but AFAICT req->part is NULL in your
> > crash, which shouldn't ever happen if IO stats are enabled).
> > 
> > Are you manually enabling/disabling IO stats via sysfs at all?
> 
> Answering my own question: unlikely.  Considering I was able to
> reproduce merely by creating an mpath device ontop of a blk-mq device
> (now that dm-mpath.c:__multipath_map sets rq->rq_disk).
> 
> I'll try to get to the bottom of it (it still seems pretty weird to me).

This fixes it:

diff --git a/block/blk-core.c b/block/blk-core.c
index cdd84e9..138ffb2 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2030,6 +2030,8 @@ int blk_insert_cloned_request(struct request_queue *q, struct request *rq)
 		return -EIO;
 
 	if (q->mq_ops) {
+		if (blk_queue_io_stat(rq->q))
+			blk_account_io_start(rq, true);
 		blk_mq_insert_request(rq, false, true, true);
 		return 0;
 	}

I've folded this fix into this commit (and rebased the 'for-next' and
'dm-for-3.20-blk-mq' branches):
https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=for-next&id=1fd5e9c83c4ae6a5144783855e9b29a8f42bdc4a




More information about the dm-devel mailing list