|
@@ -119,12 +119,16 @@ static int netvsc_close(struct net_device *net)
|
|
|
struct net_device *vf_netdev
|
|
|
= rtnl_dereference(net_device_ctx->vf_netdev);
|
|
|
struct netvsc_device *nvdev = rtnl_dereference(net_device_ctx->nvdev);
|
|
|
- int ret;
|
|
|
+ int ret = 0;
|
|
|
u32 aread, i, msec = 10, retry = 0, retry_max = 20;
|
|
|
struct vmbus_channel *chn;
|
|
|
|
|
|
netif_tx_disable(net);
|
|
|
|
|
|
+ /* No need to close rndis filter if it is removed already */
|
|
|
+ if (!nvdev)
|
|
|
+ goto out;
|
|
|
+
|
|
|
ret = rndis_filter_close(nvdev);
|
|
|
if (ret != 0) {
|
|
|
netdev_err(net, "unable to close device (ret %d).\n", ret);
|
|
@@ -163,6 +167,7 @@ static int netvsc_close(struct net_device *net)
|
|
|
ret = -ETIMEDOUT;
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
if (vf_netdev)
|
|
|
dev_close(vf_netdev);
|
|
|
|