On Tue, May 19, 2026 at 03:15:47PM -0400, Stefan Hajnoczi wrote:
When a vring is started the back-end must look for available vq buffers
and process them. This scenario can happen if the back-end is stopped
with unprocessed available buffers and then started again.
The inflight I/O tracking code already did this, but it should also be
done when inflight I/O tracking is not enabled. Move the code.
Signed-off-by: Stefan Hajnoczi <[email protected]>
---
subprojects/libvhost-user/libvhost-user.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/subprojects/libvhost-user/libvhost-user.c
b/subprojects/libvhost-user/libvhost-user.c
index 9c630c2170..2e286ea6d9 100644
--- a/subprojects/libvhost-user/libvhost-user.c
+++ b/subprojects/libvhost-user/libvhost-user.c
@@ -1390,11 +1390,6 @@ vu_check_queue_inflights(VuDev *dev, VuVirtq *vq)
vq->counter = vq->resubmit_list[0].counter + 1;
}
- /* in case of I/O hang after reconnecting */
- if (eventfd_write(vq->kick_fd, 1)) {
- return -1;
- }
-
return 0;
}
@@ -1436,6 +1431,11 @@ vu_set_vring_kick_exec(VuDev *dev, VhostUserMsg *vmsg)
vu_panic(dev, "Failed to check inflights for vq: %d\n", index);
}
+ /* Inject a kick to look for available vq buffers */
+ if (eventfd_write(dev->vq[index].kick_fd, 1)) {
Should we check if kick_fd is not -1 like we already do in other places
in this function? (mainly when `nofd` is true)
+ return -1;
This function returns boolean, -1 is `true` and IIUC means that we ask
for a reply which is not the case here. We should fix it.
Thanks,
Stefano
+ }
+
return false;
}
--
2.54.0