blk-mq-sched: check for successful allocation before assigning tag
authorJens Axboe <axboe@fb.com>
Thu, 26 Jan 2017 21:52:20 +0000 (14:52 -0700)
committerJens Axboe <axboe@fb.com>
Thu, 26 Jan 2017 21:52:20 +0000 (14:52 -0700)
We don't trigger this from the normal IO path, since we always use
blocking allocations from there. But Bart saw it testing multipath
dm, since that is a heavy user of atomic request allocations in
the map and clone path.

Reported-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq-sched.c

index 56b92db944aeb722f55db02e0ea74471caef8ec2..4cee060a292dff406d93c724da85a9e07f1a74ec 100644 (file)
@@ -134,7 +134,8 @@ struct request *blk_mq_sched_get_request(struct request_queue *q,
                        rq = __blk_mq_alloc_request(data, op);
        } else {
                rq = __blk_mq_alloc_request(data, op);
-               data->hctx->tags->rqs[rq->tag] = rq;
+               if (rq)
+                       data->hctx->tags->rqs[rq->tag] = rq;
        }
 
        if (rq) {