lkml.org 
[lkml]   [2018]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 6/6] virtio_console: reset on out of memory
    When out of memory and we can't add ctrl vq buffers,
    probe fails. Unfortunately the error handling is
    out of spec: it calls del_vqs without bothering
    to reset the device first.

    To fix, call the full cleanup function in this case.

    Cc: stable@vger.kernel.org
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    ---
    drivers/char/virtio_console.c | 17 ++++++++++-------
    1 file changed, 10 insertions(+), 7 deletions(-)

    diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
    index e8480fe..2108551 100644
    --- a/drivers/char/virtio_console.c
    +++ b/drivers/char/virtio_console.c
    @@ -2090,6 +2090,7 @@ static int virtcons_probe(struct virtio_device *vdev)

    spin_lock_init(&portdev->ports_lock);
    INIT_LIST_HEAD(&portdev->ports);
    + INIT_LIST_HEAD(&portdev->list);

    virtio_device_ready(portdev->vdev);

    @@ -2107,8 +2108,15 @@ static int virtcons_probe(struct virtio_device *vdev)
    if (!nr_added_bufs) {
    dev_err(&vdev->dev,
    "Error allocating buffers for control queue\n");
    - err = -ENOMEM;
    - goto free_vqs;
    + /*
    + * The host might want to notify mgmt sw about device
    + * add failure.
    + */
    + __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
    + VIRTIO_CONSOLE_DEVICE_READY, 0);
    + /* Device was functional: we need full cleanup. */
    + virtcons_remove(vdev);
    + return -ENOMEM;
    }
    } else {
    /*
    @@ -2139,11 +2147,6 @@ static int virtcons_probe(struct virtio_device *vdev)

    return 0;

    -free_vqs:
    - /* The host might want to notify mgmt sw about device add failure */
    - __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
    - VIRTIO_CONSOLE_DEVICE_READY, 0);
    - remove_vqs(portdev);
    free_chrdev:
    unregister_chrdev(portdev->chr_major, "virtio-portsdev");
    free:
    --
    MST
    \
     
     \ /
      Last update: 2018-04-20 20:18    [W:4.818 / U:1.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site