> When the owner is killed, vhost_worker_killed() detaches the worker
> from the virtqueues and runs only the work already queued. A request
> that completes after that is added to blk_vq->llhead, but
> vhost_vq_work_queue() returns false and queues nothing, so the request
> is never forgotten. req_inflight[] stays elevated and vhost_blk_flush()
> hangs uninterruptibly in release when the fd is closed. A request in
> flight at the kill is enough.
> 
> Release such requests from a work item when the worker cannot be
> queued, as vhost-scsi does in vhost_scsi_drop_cmds(). The bio
> completion may run in interrupt context, where forget_request() and
> the kvfree() of the request buffers are not allowed. The guest is not
> answered, its memory is no longer reachable.
> 
> Once the completion publishes the request, the request can be
> forgotten and vhost_blk_flush() can return while the completion is
> still queueing work into blk, which release then frees. Queue under
> rcu_read_lock() and wait for it with synchronize_rcu() in
> vhost_blk_drop_backend(), then flush the drop work before freeing the
> requests. Flushing there rather than in release also keeps a stale
> drop work from releasing requests of the next owner after
> VHOST_RESET_OWNER.
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-141684
> 
> Fixes: 1629db092dd7 ("drivers/vhost: vhost-blk accelerator for virtio-blk 
> guests")
> Feature: vhost-blk: in-kernel accelerator for virtio-blk guests
> Signed-off-by: Alexander Ivanov <[email protected]>

Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review ยท 
https://sashiko.vzint.dev/#/patchset/[email protected]?part=1


_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to