diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
commit | 0cb7bf61b1e9f05027de58c80f9b46a714d24e35 (patch) | |
tree | 41fb55cf62d07b425122f9a8b96412c0d8eb99c5 /net/openvswitch/vport-gre.c | |
parent | aa877175e7a9982233ed8f10cb4bfddd78d82741 (diff) | |
parent | 3eab887a55424fc2c27553b7bfe32330df83f7b8 (diff) |
Merge branch 'linus' into smp/hotplug
Apply upstream changes to avoid conflicts with pending patches.
Diffstat (limited to 'net/openvswitch/vport-gre.c')
-rw-r--r-- | net/openvswitch/vport-gre.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/openvswitch/vport-gre.c b/net/openvswitch/vport-gre.c index 7f8897f33a67..0e72d95b0e8f 100644 --- a/net/openvswitch/vport-gre.c +++ b/net/openvswitch/vport-gre.c | |||
@@ -54,6 +54,7 @@ static struct vport *gre_tnl_create(const struct vport_parms *parms) | |||
54 | struct net *net = ovs_dp_get_net(parms->dp); | 54 | struct net *net = ovs_dp_get_net(parms->dp); |
55 | struct net_device *dev; | 55 | struct net_device *dev; |
56 | struct vport *vport; | 56 | struct vport *vport; |
57 | int err; | ||
57 | 58 | ||
58 | vport = ovs_vport_alloc(0, &ovs_gre_vport_ops, parms); | 59 | vport = ovs_vport_alloc(0, &ovs_gre_vport_ops, parms); |
59 | if (IS_ERR(vport)) | 60 | if (IS_ERR(vport)) |
@@ -67,9 +68,15 @@ static struct vport *gre_tnl_create(const struct vport_parms *parms) | |||
67 | return ERR_CAST(dev); | 68 | return ERR_CAST(dev); |
68 | } | 69 | } |
69 | 70 | ||
70 | dev_change_flags(dev, dev->flags | IFF_UP); | 71 | err = dev_change_flags(dev, dev->flags | IFF_UP); |
71 | rtnl_unlock(); | 72 | if (err < 0) { |
73 | rtnl_delete_link(dev); | ||
74 | rtnl_unlock(); | ||
75 | ovs_vport_free(vport); | ||
76 | return ERR_PTR(err); | ||
77 | } | ||
72 | 78 | ||
79 | rtnl_unlock(); | ||
73 | return vport; | 80 | return vport; |
74 | } | 81 | } |
75 | 82 | ||