rtnetlink: call ->dellink on failure when ->newlink exists
[firefly-linux-kernel-4.4.55.git] / net / core / rtnetlink.c
index 72fd097c3fc67be8824bcdccd56b1240d7d5ff50..a67310e00b3fffedd426a2ed1c1843b16caaa4c3 100644 (file)
@@ -1851,8 +1851,16 @@ replay:
                        goto out;
 
                err = rtnl_configure_link(dev, ifm);
-               if (err < 0)
-                       unregister_netdevice(dev);
+               if (err < 0) {
+                       if (ops->newlink) {
+                               LIST_HEAD(list_kill);
+
+                               ops->dellink(dev, &list_kill);
+                               unregister_netdevice_many(&list_kill);
+                       } else {
+                               unregister_netdevice(dev);
+                       }
+               }
 out:
                put_net(dest_net);
                return err;