hv_netvsc: Fix rndis_filter_close error during netvsc_remove
authorHaiyang Zhang <haiyangz@microsoft.com>
Thu, 24 Aug 2017 18:50:02 +0000 (11:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Aug 2017 04:55:59 +0000 (21:55 -0700)
We now remove rndis filter before unregister_netdev(), which calls
device close. It involves closing rndis filter already removed.

This patch fixes this error.

Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/hyperv/netvsc_drv.c

index c0c4c9195a3f91041f44abc6a183272965867ff1..fac44c5c8d0d6fa5f4ced3e267f3b6a5e3f653f2 100644 (file)
@@ -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);