If setting new values fails, and the attempt to restore original
settings fails. Then log an error and leave device down.
This should never happen, but if it does don't go down in flames.

Signed-off-by: Stephen Hemminger <sthem...@microsoft.com>
---
 drivers/net/hyperv/netvsc_drv.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 07015b1c42c6..c7391889938b 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -845,7 +845,13 @@ static int netvsc_set_channels(struct net_device *net,
        } else {
                ret = PTR_ERR(nvdev);
                device_info.num_chn = orig;
-               rndis_filter_device_add(dev, &device_info);
+               nvdev = rndis_filter_device_add(dev, &device_info);
+
+               if (IS_ERR(nvdev)) {
+                       netdev_err(net, "restoring channel setting failed: 
%ld\n",
+                                  PTR_ERR(nvdev));
+                       return ret;
+               }
        }
 
        if (was_opened)
@@ -953,10 +959,16 @@ static int netvsc_change_mtu(struct net_device *ndev, int 
mtu)
 
                /* Attempt rollback to original MTU */
                ndev->mtu = orig_mtu;
-               rndis_filter_device_add(hdev, &device_info);
+               nvdev = rndis_filter_device_add(hdev, &device_info);
 
                if (vf_netdev)
                        dev_set_mtu(vf_netdev, orig_mtu);
+
+               if (IS_ERR(nvdev)) {
+                       netdev_err(ndev, "restoring mtu failed: %ld\n",
+                                  PTR_ERR(nvdev));
+                       return ret;
+               }
        }
 
        if (was_opened)
-- 
2.11.0

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to