Thread (13 messages) 13 messages, 5 authors, 2020-03-03

Re: [PATCH 1/2] virtio-blk: fix hw_queue stopped on arbitrary error

From: Ming Lei <tom.leiming@gmail.com>
Date: 2020-02-18 02:21:34
Also in: linux-block, linux-s390, lkml

On Thu, Feb 13, 2020 at 8:38 PM Halil Pasic [off-list ref] wrote:
Since nobody else is going to restart our hw_queue for us, the
blk_mq_start_stopped_hw_queues() is in virtblk_done() is not sufficient
necessarily sufficient to ensure that the queue will get started again.
In case of global resource outage (-ENOMEM because mapping failure,
because of swiotlb full) our virtqueue may be empty and we can get
stuck with a stopped hw_queue.

Let us not stop the queue on arbitrary errors, but only on -EONSPC which
indicates a full virtqueue, where the hw_queue is guaranteed to get
started by virtblk_done() before when it makes sense to carry on
submitting requests. Let us also remove a stale comment.
The generic solution may be to stop queue only when there is any
in-flight request
not completed.

Checking -ENOMEM may not be enough, given -EIO can be returned from
virtqueue_add()
too in case of dma map failure.

Thanks,
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help