From f39335453fe79f4e12e263e7c6387dc9fb86bfff Mon Sep 17 00:00:00 2001 From: Eric Van Hensbergen Date: Wed, 6 Feb 2008 19:25:04 -0600 Subject: [PATCH] 9p: add remove function to trans_virtio Request from rusty: Just cleaning up patches for 2.6.25 merge, and noticed that net/9p/trans_virtio.c doesn't have a remove function. This will crash when removing the module (console doesn't have one because it can't really be removed). Signed-off-by: Eric Van Hensbergen --- net/9p/trans_virtio.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index 7853c31bd690..c957080966b4 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c @@ -385,6 +385,18 @@ static struct p9_trans *p9_virtio_create(const char *devname, char *args) return trans; } +static void p9_virtio_remove(struct virtio_device *vdev) +{ + struct virtio_chan *chan = vdev->priv; + + BUG_ON(chan->inuse); + + if (chan->initialized) { + vdev->config->del_vq(chan->vq); + chan->initialized = false; + } +} + #define VIRTIO_ID_9P 9 static struct virtio_device_id id_table[] = { @@ -398,6 +410,7 @@ static struct virtio_driver p9_virtio_drv = { .driver.owner = THIS_MODULE, .id_table = id_table, .probe = p9_virtio_probe, + .remove = p9_virtio_remove, }; static struct p9_trans_module p9_virtio_trans = { @@ -419,7 +432,13 @@ static int __init p9_virtio_init(void) return register_virtio_driver(&p9_virtio_drv); } +static void __exit p9_virtio_cleanup(void) +{ + unregister_virtio_driver(&p9_virtio_drv); +} + module_init(p9_virtio_init); +module_exit(p9_virtio_cleanup); MODULE_DEVICE_TABLE(virtio, id_table); MODULE_AUTHOR("Eric Van Hensbergen ");