diff options
author | Dwight Engen <dwight.engen@oracle.com> | 2014-12-11 12:25:42 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-11 21:51:57 -0500 |
commit | 31f4888f51afb038f7f8e7e4b3f0a80587c92c9b (patch) | |
tree | 148df67a71243bdb6be59ea14a504da3617d9efb | |
parent | 92f268eefe38c62aaf9ee9cea5e05f2abf9d3d60 (diff) |
sunvdc: fix module unload/reload
Free resources allocated during port/disk probing so that the module may be
successfully reloaded after unloading.
Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/block/sunvdc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c index 0ebadf93b6c5..089ff9035de6 100644 --- a/drivers/block/sunvdc.c +++ b/drivers/block/sunvdc.c | |||
@@ -896,8 +896,19 @@ static int vdc_port_remove(struct vio_dev *vdev) | |||
896 | struct vdc_port *port = dev_get_drvdata(&vdev->dev); | 896 | struct vdc_port *port = dev_get_drvdata(&vdev->dev); |
897 | 897 | ||
898 | if (port) { | 898 | if (port) { |
899 | unsigned long flags; | ||
900 | |||
901 | spin_lock_irqsave(&port->vio.lock, flags); | ||
902 | blk_stop_queue(port->disk->queue); | ||
903 | spin_unlock_irqrestore(&port->vio.lock, flags); | ||
904 | |||
899 | del_timer_sync(&port->vio.timer); | 905 | del_timer_sync(&port->vio.timer); |
900 | 906 | ||
907 | del_gendisk(port->disk); | ||
908 | blk_cleanup_queue(port->disk->queue); | ||
909 | put_disk(port->disk); | ||
910 | port->disk = NULL; | ||
911 | |||
901 | vdc_free_tx_ring(port); | 912 | vdc_free_tx_ring(port); |
902 | vio_ldc_free(&port->vio); | 913 | vio_ldc_free(&port->vio); |
903 | 914 | ||