On 6/24/26 18:56, David Hildenbrand (Arm) wrote: > On 6/24/26 17:40, Denis V. Lunev wrote: >> Like tell_host(), stats_handle_request() ignores the return value of >> virtqueue_add_outbuf() and kicks the queue regardless. The same "we >> should always be able to add one buffer to an empty queue" assumption >> does not hold once the virtqueue has been broken (e.g. on device >> shutdown), where the add fails with -EIO. Unlike tell_host() it does >> not wait_event() afterwards so it cannot hang, but it still kicks a >> queue with nothing queued. >> >> Warn and bail out on failure, mirroring tell_host() and >> virtballoon_free_page_report(). >> >> Suggested-by: David Hildenbrand <[email protected]> >> Signed-off-by: Denis V. Lunev <[email protected]> >> --- >> drivers/virtio/virtio_balloon.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/virtio/virtio_balloon.c >> b/drivers/virtio/virtio_balloon.c >> index 0866a8781f0b..454bbb77331d 100644 >> --- a/drivers/virtio/virtio_balloon.c >> +++ b/drivers/virtio/virtio_balloon.c >> @@ -445,6 +445,7 @@ static void stats_handle_request(struct virtio_balloon >> *vb) >> struct virtqueue *vq; >> struct scatterlist sg; >> unsigned int len, num_stats; >> + int err; >> >> num_stats = update_balloon_stats(vb); >> >> @@ -452,7 +453,9 @@ static void stats_handle_request(struct virtio_balloon >> *vb) >> if (!virtqueue_get_buf(vq, &len)) >> return; >> sg_init_one(&sg, vb->stats, sizeof(vb->stats[0]) * num_stats); >> - virtqueue_add_outbuf(vq, &sg, 1, vb, GFP_KERNEL); >> + err = virtqueue_add_outbuf(vq, &sg, 1, vb, GFP_KERNEL); >> + if (WARN_ON_ONCE(err)) >> + return; >> virtqueue_kick(vq); >> } >> > Reviewed-by: David Hildenbrand (Arm) <[email protected]> > > Although I would just squash #4 and #5. > Sure thing. Does this way to avoid re-submit if that is possible.
Den

