forked from luck/tmp_suning_uos_patched
hyperv: Fix race between probe and open calls
Moving the register_netdev to the end of probe to prevent possible open call happens before NetVSP is connected. Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com> Reviewed-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
965cdea825
commit
a68f961461
@ -261,9 +261,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
|
||||
struct sk_buff *skb;
|
||||
|
||||
net = ((struct netvsc_device *)hv_get_drvdata(device_obj))->ndev;
|
||||
if (!net) {
|
||||
netdev_err(net, "got receive callback but net device"
|
||||
" not initialized yet\n");
|
||||
if (!net || net->reg_state != NETREG_REGISTERED) {
|
||||
packet->status = NVSP_STAT_FAIL;
|
||||
return 0;
|
||||
}
|
||||
@ -435,19 +433,11 @@ static int netvsc_probe(struct hv_device *dev,
|
||||
SET_ETHTOOL_OPS(net, ðtool_ops);
|
||||
SET_NETDEV_DEV(net, &dev->device);
|
||||
|
||||
ret = register_netdev(net);
|
||||
if (ret != 0) {
|
||||
pr_err("Unable to register netdev.\n");
|
||||
free_netdev(net);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Notify the netvsc driver of the new device */
|
||||
device_info.ring_size = ring_size;
|
||||
ret = rndis_filter_device_add(dev, &device_info);
|
||||
if (ret != 0) {
|
||||
netdev_err(net, "unable to add netvsc device (ret %d)\n", ret);
|
||||
unregister_netdev(net);
|
||||
free_netdev(net);
|
||||
hv_set_drvdata(dev, NULL);
|
||||
return ret;
|
||||
@ -456,7 +446,13 @@ static int netvsc_probe(struct hv_device *dev,
|
||||
|
||||
netif_carrier_on(net);
|
||||
|
||||
out:
|
||||
ret = register_netdev(net);
|
||||
if (ret != 0) {
|
||||
pr_err("Unable to register netdev.\n");
|
||||
rndis_filter_device_remove(dev);
|
||||
free_netdev(net);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user