| From d848074b2f1eb11a38691285f7366bce83087014 Mon Sep 17 00:00:00 2001 |
| From: Anton Ivanov <anton.ivanov@cambridgegreys.com> |
| Date: Tue, 29 Oct 2019 09:13:34 +0000 |
| Subject: um-ubd: Entrust re-queue to the upper layers |
| |
| From: Anton Ivanov <anton.ivanov@cambridgegreys.com> |
| |
| commit d848074b2f1eb11a38691285f7366bce83087014 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/um/drivers/ubd_kern.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/arch/um/drivers/ubd_kern.c |
| +++ b/arch/um/drivers/ubd_kern.c |
| @@ -1403,8 +1403,12 @@ static blk_status_t ubd_queue_rq(struct |
| |
| 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; |
| } |