diff options
Diffstat (limited to 'drivers/net/xen-netback/interface.c')
-rw-r--r-- | drivers/net/xen-netback/interface.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index f733cae3d4b6..fc1b8d78f4bc 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c | |||
@@ -345,17 +345,22 @@ err: | |||
345 | return err; | 345 | return err; |
346 | } | 346 | } |
347 | 347 | ||
348 | void xenvif_disconnect(struct xenvif *vif) | 348 | void xenvif_carrier_off(struct xenvif *vif) |
349 | { | 349 | { |
350 | struct net_device *dev = vif->dev; | 350 | struct net_device *dev = vif->dev; |
351 | if (netif_carrier_ok(dev)) { | 351 | |
352 | rtnl_lock(); | 352 | rtnl_lock(); |
353 | netif_carrier_off(dev); /* discard queued packets */ | 353 | netif_carrier_off(dev); /* discard queued packets */ |
354 | if (netif_running(dev)) | 354 | if (netif_running(dev)) |
355 | xenvif_down(vif); | 355 | xenvif_down(vif); |
356 | rtnl_unlock(); | 356 | rtnl_unlock(); |
357 | xenvif_put(vif); | 357 | xenvif_put(vif); |
358 | } | 358 | } |
359 | |||
360 | void xenvif_disconnect(struct xenvif *vif) | ||
361 | { | ||
362 | if (netif_carrier_ok(vif->dev)) | ||
363 | xenvif_carrier_off(vif); | ||
359 | 364 | ||
360 | atomic_dec(&vif->refcnt); | 365 | atomic_dec(&vif->refcnt); |
361 | wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0); | 366 | wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0); |