diff options
| -rw-r--r-- | drivers/net/hyperv/netvsc_drv.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index 2d3cdb026a99..bc05c895d958 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c | |||
| @@ -859,15 +859,22 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu) | |||
| 859 | if (ret) | 859 | if (ret) |
| 860 | goto out; | 860 | goto out; |
| 861 | 861 | ||
| 862 | memset(&device_info, 0, sizeof(device_info)); | ||
| 863 | device_info.ring_size = ring_size; | ||
| 864 | device_info.num_chn = nvdev->num_chn; | ||
| 865 | device_info.max_num_vrss_chns = nvdev->num_chn; | ||
| 866 | |||
| 862 | ndevctx->start_remove = true; | 867 | ndevctx->start_remove = true; |
| 863 | rndis_filter_device_remove(hdev, nvdev); | 868 | rndis_filter_device_remove(hdev, nvdev); |
| 864 | 869 | ||
| 870 | /* 'nvdev' has been freed in rndis_filter_device_remove() -> | ||
| 871 | * netvsc_device_remove () -> free_netvsc_device(). | ||
| 872 | * We mustn't access it before it's re-created in | ||
| 873 | * rndis_filter_device_add() -> netvsc_device_add(). | ||
| 874 | */ | ||
| 875 | |||
| 865 | ndev->mtu = mtu; | 876 | ndev->mtu = mtu; |
| 866 | 877 | ||
| 867 | memset(&device_info, 0, sizeof(device_info)); | ||
| 868 | device_info.ring_size = ring_size; | ||
| 869 | device_info.num_chn = nvdev->num_chn; | ||
| 870 | device_info.max_num_vrss_chns = nvdev->num_chn; | ||
| 871 | rndis_filter_device_add(hdev, &device_info); | 878 | rndis_filter_device_add(hdev, &device_info); |
| 872 | 879 | ||
| 873 | out: | 880 | out: |
