diff options
Diffstat (limited to 'net/core/rtnetlink.c')
| -rw-r--r-- | net/core/rtnetlink.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 25b4b5d23485..ee0608bb3bc0 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
| @@ -2166,28 +2166,28 @@ replay: | |||
| 2166 | } | 2166 | } |
| 2167 | } | 2167 | } |
| 2168 | err = rtnl_configure_link(dev, ifm); | 2168 | err = rtnl_configure_link(dev, ifm); |
| 2169 | if (err < 0) { | 2169 | if (err < 0) |
| 2170 | if (ops->newlink) { | 2170 | goto out_unregister; |
| 2171 | LIST_HEAD(list_kill); | ||
| 2172 | |||
| 2173 | ops->dellink(dev, &list_kill); | ||
| 2174 | unregister_netdevice_many(&list_kill); | ||
| 2175 | } else { | ||
| 2176 | unregister_netdevice(dev); | ||
| 2177 | } | ||
| 2178 | goto out; | ||
| 2179 | } | ||
| 2180 | |||
| 2181 | if (link_net) { | 2171 | if (link_net) { |
| 2182 | err = dev_change_net_namespace(dev, dest_net, ifname); | 2172 | err = dev_change_net_namespace(dev, dest_net, ifname); |
| 2183 | if (err < 0) | 2173 | if (err < 0) |
| 2184 | unregister_netdevice(dev); | 2174 | goto out_unregister; |
| 2185 | } | 2175 | } |
| 2186 | out: | 2176 | out: |
| 2187 | if (link_net) | 2177 | if (link_net) |
| 2188 | put_net(link_net); | 2178 | put_net(link_net); |
| 2189 | put_net(dest_net); | 2179 | put_net(dest_net); |
| 2190 | return err; | 2180 | return err; |
| 2181 | out_unregister: | ||
| 2182 | if (ops->newlink) { | ||
| 2183 | LIST_HEAD(list_kill); | ||
| 2184 | |||
| 2185 | ops->dellink(dev, &list_kill); | ||
| 2186 | unregister_netdevice_many(&list_kill); | ||
| 2187 | } else { | ||
| 2188 | unregister_netdevice(dev); | ||
| 2189 | } | ||
| 2190 | goto out; | ||
| 2191 | } | 2191 | } |
| 2192 | } | 2192 | } |
| 2193 | 2193 | ||
