diff options
author | Haiyang Zhang <haiyangz@microsoft.com> | 2014-03-04 17:11:06 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-05 20:40:25 -0500 |
commit | 1b07da516ee25250f458c76c012ebe4cd677a84f (patch) | |
tree | ac4eef27d05f7b53022a2274292b40c7d0733d0e /drivers/net/hyperv/netvsc_drv.c | |
parent | 48330e08fa168395b9fd9f369f06cca1df204361 (diff) |
hyperv: Move state setting for link query
It moves the state setting for query into rndis_filter_receive_response().
All callbacks including query-complete and status-callback are synchronized
by channel->inbound_lock. This prevents pentential race between them.
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv/netvsc_drv.c')
-rw-r--r-- | drivers/net/hyperv/netvsc_drv.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 7141a1937360..d6fce9750b95 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c | |||
@@ -442,6 +442,8 @@ static int netvsc_probe(struct hv_device *dev, | |||
442 | if (!net) | 442 | if (!net) |
443 | return -ENOMEM; | 443 | return -ENOMEM; |
444 | 444 | ||
445 | netif_carrier_off(net); | ||
446 | |||
445 | net_device_ctx = netdev_priv(net); | 447 | net_device_ctx = netdev_priv(net); |
446 | net_device_ctx->device_ctx = dev; | 448 | net_device_ctx->device_ctx = dev; |
447 | hv_set_drvdata(dev, net); | 449 | hv_set_drvdata(dev, net); |
@@ -473,6 +475,8 @@ static int netvsc_probe(struct hv_device *dev, | |||
473 | pr_err("Unable to register netdev.\n"); | 475 | pr_err("Unable to register netdev.\n"); |
474 | rndis_filter_device_remove(dev); | 476 | rndis_filter_device_remove(dev); |
475 | free_netdev(net); | 477 | free_netdev(net); |
478 | } else { | ||
479 | schedule_delayed_work(&net_device_ctx->dwork, 0); | ||
476 | } | 480 | } |
477 | 481 | ||
478 | return ret; | 482 | return ret; |