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>
        struct vdc_port *port = dev_get_drvdata(&vdev->dev);
 
        if (port) {
+               unsigned long flags;
+
+               spin_lock_irqsave(&port->vio.lock, flags);
+               blk_stop_queue(port->disk->queue);
+               spin_unlock_irqrestore(&port->vio.lock, flags);
+
                del_timer_sync(&port->vio.timer);
 
+               del_gendisk(port->disk);
+               blk_cleanup_queue(port->disk->queue);
+               put_disk(port->disk);
+               port->disk = NULL;
+
                vdc_free_tx_ring(port);
                vio_ldc_free(&port->vio);