virtio: console: make discard_port_data() use get_inbuf()
authorAmit Shah <amit.shah@redhat.com>
Wed, 14 Sep 2011 07:36:45 +0000 (13:06 +0530)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 2 Nov 2011 01:11:00 +0000 (11:41 +1030)
discard_port_data() used virtqueue_get_buf() directly instead of using
get_inbuf().  Fix this, so that we get accounting for all received
bytes.  This also simplifies the code a lot.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/char/virtio_console.c

index 0538425..105181c 100644 (file)
@@ -386,28 +386,23 @@ static int add_inbuf(struct virtqueue *vq, struct port_buffer *buf)
 static void discard_port_data(struct port *port)
 {
        struct port_buffer *buf;
-       struct virtqueue *vq;
-       unsigned int len, err;
+       unsigned int err;
 
        if (!port->portdev) {
                /* Device has been unplugged.  vqs are already gone. */
                return;
        }
-       vq = port->in_vq;
-       if (port->inbuf)
-               buf = port->inbuf;
-       else
-               buf = virtqueue_get_buf(vq, &len);
+       buf = get_inbuf(port);
 
        err = 0;
        while (buf) {
-               if (add_inbuf(vq, buf) < 0) {
+               if (add_inbuf(port->in_vq, buf) < 0) {
                        err++;
                        free_buf(buf);
                }
-               buf = virtqueue_get_buf(vq, &len);
+               port->inbuf = NULL;
+               buf = get_inbuf(port);
        }
-       port->inbuf = NULL;
        if (err)
                dev_warn(port->dev, "Errors adding %d buffers back to vq\n",
                         err);