virtio: balloon: separate out common code between remove and freeze functions
authorAmit Shah <amit.shah@redhat.com>
Thu, 26 Apr 2012 19:15:57 +0000 (00:45 +0530)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 22 May 2012 02:46:11 +0000 (12:16 +0930)
The remove and freeze functions have a lot of shared code; put it into a
common function that gets called by both.

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

index 04baad6..bfbc15c 100644 (file)
@@ -381,21 +381,25 @@ out:
        return err;
 }
 
-static void __devexit virtballoon_remove(struct virtio_device *vdev)
+static void remove_common(struct virtio_balloon *vb)
 {
-       struct virtio_balloon *vb = vdev->priv;
-
-       kthread_stop(vb->thread);
-
        /* There might be pages left in the balloon: free them. */
        while (vb->num_pages)
                leak_balloon(vb, vb->num_pages);
        update_balloon_size(vb);
 
        /* Now we reset the device so we can clean up the queues. */
-       vdev->config->reset(vdev);
+       vb->vdev->config->reset(vb->vdev);
 
-       vdev->config->del_vqs(vdev);
+       vb->vdev->config->del_vqs(vb->vdev);
+}
+
+static void __devexit virtballoon_remove(struct virtio_device *vdev)
+{
+       struct virtio_balloon *vb = vdev->priv;
+
+       kthread_stop(vb->thread);
+       remove_common(vb);
        kfree(vb);
 }
 
@@ -409,13 +413,7 @@ static int virtballoon_freeze(struct virtio_device *vdev)
         * function is called.
         */
 
-       while (vb->num_pages)
-               leak_balloon(vb, vb->num_pages);
-       update_balloon_size(vb);
-
-       /* Ensure we don't get any more requests from the host */
-       vdev->config->reset(vdev);
-       vdev->config->del_vqs(vdev);
+       remove_common(vb);
        return 0;
 }