[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