> 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
