X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fhyperv%2Fnetvsc_drv.c;h=915fbd66a02b5e1619b93a287fa5010ba61b1350;hb=018349d70f28a78d5343b3660cb66e1667005f8a;hp=70921bbe0e28b448256d18cd8897eba9ae731c31;hpb=f5b9bac7451cfc962970cb3fa3a7027ffa69e369;p=thirdparty%2Fkernel%2Fstable.git diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 70921bbe0e28b..915fbd66a02b5 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -2272,17 +2272,15 @@ static int netvsc_remove(struct hv_device *dev) cancel_delayed_work_sync(&ndev_ctx->dwork); - rcu_read_lock(); - nvdev = rcu_dereference(ndev_ctx->nvdev); - - if (nvdev) + rtnl_lock(); + nvdev = rtnl_dereference(ndev_ctx->nvdev); + if (nvdev) cancel_work_sync(&nvdev->subchan_work); /* * Call to the vsc driver to let it know that the device is being * removed. Also blocks mtu and channel changes. */ - rtnl_lock(); vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); if (vf_netdev) netvsc_unregister_vf(vf_netdev); @@ -2294,7 +2292,6 @@ static int netvsc_remove(struct hv_device *dev) list_del(&ndev_ctx->list); rtnl_unlock(); - rcu_read_unlock(); hv_set_drvdata(dev, NULL);