diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2007-11-19 11:20:42 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2007-11-19 11:20:42 +1100 |
commit | 74b2553f1d13e60fb27063204bd5b6908a6f8494 (patch) | |
tree | cd35e82d16cf190ccd95362478a598314de639ce /drivers/net/virtio_net.c | |
parent | d1c856e0f1a4c946c6329cff126548ef4288735f (diff) | |
download | lwn-74b2553f1d13e60fb27063204bd5b6908a6f8494.tar.gz lwn-74b2553f1d13e60fb27063204bd5b6908a6f8494.zip |
virtio: fix module/device unloading
The virtio code never hooked through the ->remove callback. Although
noone supports device removal at the moment, this code is already
needed for module unloading.
This of course also revealed bugs in virtio_blk, virtio_net and lguest
unloading paths.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/net/virtio_net.c')
-rw-r--r-- | drivers/net/virtio_net.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index a75be57fb209..d74e6f4aa248 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -404,8 +404,12 @@ free: static void virtnet_remove(struct virtio_device *vdev) { - unregister_netdev(vdev->priv); - free_netdev(vdev->priv); + struct virtnet_info *vi = vdev->priv; + + vdev->config->del_vq(vi->svq); + vdev->config->del_vq(vi->rvq); + unregister_netdev(vi->dev); + free_netdev(vi->dev); } static struct virtio_device_id id_table[] = { |