Commit 26307f6a authored by Fam Zheng's avatar Fam Zheng Committed by Stefan Hajnoczi
Browse files

virtio-blk: Release s->rq queue at system_reset



At system_reset, there is no point in retrying the queued request,
because the driver that issued the request won't be around any more.

Analyzed-by: default avatarLaszlo Ersek <lersek@redhat.com>
Reported-by: default avatarLaszlo Ersek <lersek@redhat.com>
Signed-off-by: default avatarFam Zheng <famz@redhat.com>
Reviewed-by: default avatarLaszlo Ersek <lersek@redhat.com>
Message-id: 1470278654-13525-2-git-send-email-famz@redhat.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 5fc8c052
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -654,6 +654,7 @@ static void virtio_blk_reset(VirtIODevice *vdev)
{
    VirtIOBlock *s = VIRTIO_BLK(vdev);
    AioContext *ctx;
    VirtIOBlockReq *req;

    /*
     * This should cancel pending requests, but can't do nicely until there
@@ -663,6 +664,14 @@ static void virtio_blk_reset(VirtIODevice *vdev)
    aio_context_acquire(ctx);
    blk_drain(s->blk);

    /* We drop queued requests after blk_drain() because blk_drain() itself can
     * produce them. */
    while (s->rq) {
        req = s->rq;
        s->rq = req->next;
        virtio_blk_free_request(req);
    }

    if (s->dataplane) {
        virtio_blk_data_plane_stop(s->dataplane);
    }