diff options
Diffstat (limited to 'drivers/net/xen-netback/xenbus.c')
-rw-r--r-- | drivers/net/xen-netback/xenbus.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index 3124eaec9427..85b742e1c42f 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c | |||
@@ -493,11 +493,22 @@ static int backend_create_xenvif(struct backend_info *be) | |||
493 | static void backend_disconnect(struct backend_info *be) | 493 | static void backend_disconnect(struct backend_info *be) |
494 | { | 494 | { |
495 | if (be->vif) { | 495 | if (be->vif) { |
496 | unsigned int queue_index; | ||
497 | |||
496 | xen_unregister_watchers(be->vif); | 498 | xen_unregister_watchers(be->vif); |
497 | #ifdef CONFIG_DEBUG_FS | 499 | #ifdef CONFIG_DEBUG_FS |
498 | xenvif_debugfs_delif(be->vif); | 500 | xenvif_debugfs_delif(be->vif); |
499 | #endif /* CONFIG_DEBUG_FS */ | 501 | #endif /* CONFIG_DEBUG_FS */ |
500 | xenvif_disconnect_data(be->vif); | 502 | xenvif_disconnect_data(be->vif); |
503 | for (queue_index = 0; queue_index < be->vif->num_queues; ++queue_index) | ||
504 | xenvif_deinit_queue(&be->vif->queues[queue_index]); | ||
505 | |||
506 | spin_lock(&be->vif->lock); | ||
507 | vfree(be->vif->queues); | ||
508 | be->vif->num_queues = 0; | ||
509 | be->vif->queues = NULL; | ||
510 | spin_unlock(&be->vif->lock); | ||
511 | |||
501 | xenvif_disconnect_ctrl(be->vif); | 512 | xenvif_disconnect_ctrl(be->vif); |
502 | } | 513 | } |
503 | } | 514 | } |
@@ -1034,6 +1045,8 @@ static void connect(struct backend_info *be) | |||
1034 | err: | 1045 | err: |
1035 | if (be->vif->num_queues > 0) | 1046 | if (be->vif->num_queues > 0) |
1036 | xenvif_disconnect_data(be->vif); /* Clean up existing queues */ | 1047 | xenvif_disconnect_data(be->vif); /* Clean up existing queues */ |
1048 | for (queue_index = 0; queue_index < be->vif->num_queues; ++queue_index) | ||
1049 | xenvif_deinit_queue(&be->vif->queues[queue_index]); | ||
1037 | vfree(be->vif->queues); | 1050 | vfree(be->vif->queues); |
1038 | be->vif->queues = NULL; | 1051 | be->vif->queues = NULL; |
1039 | be->vif->num_queues = 0; | 1052 | be->vif->num_queues = 0; |