]> git.dujemihanovic.xyz Git - linux.git/commitdiff
um-ubd: Entrust re-queue to the upper layers
authorAnton Ivanov <anton.ivanov@cambridgegreys.com>
Tue, 29 Oct 2019 09:13:34 +0000 (09:13 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 29 Oct 2019 16:07:41 +0000 (10:07 -0600)
Fixes crashes due to ubd requeue logic conflicting with the block-mq
logic. Crash is reproducible in 5.0 - 5.3.

Fixes: 53766defb8c8 ("um: Clean-up command processing in UML UBD driver")
Cc: stable@vger.kernel.org # v5.0+
Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
arch/um/drivers/ubd_kern.c

index 612535cd97065beecb42bb59c4d2d4ca8252f6c4..6627d7c30f3700954ca655527b3490dbf28dacde 100644 (file)
@@ -1403,8 +1403,12 @@ static blk_status_t ubd_queue_rq(struct blk_mq_hw_ctx *hctx,
 
        spin_unlock_irq(&ubd_dev->lock);
 
-       if (ret < 0)
-               blk_mq_requeue_request(req, true);
+       if (ret < 0) {
+               if (ret == -ENOMEM)
+                       res = BLK_STS_RESOURCE;
+               else
+                       res = BLK_STS_DEV_RESOURCE;
+       }
 
        return res;
 }