File tree 1 file changed +12
-6
lines changed 1 file changed +12
-6
lines changed Original file line number Diff line number Diff line change @@ -170,16 +170,19 @@ static struct vport *internal_dev_create(const struct vport_parms *parms)
170
170
{
171
171
struct vport * vport ;
172
172
struct internal_dev * internal_dev ;
173
+ struct net_device * dev ;
173
174
int err ;
175
+ bool free_vport = true;
174
176
175
177
vport = ovs_vport_alloc (0 , & ovs_internal_vport_ops , parms );
176
178
if (IS_ERR (vport )) {
177
179
err = PTR_ERR (vport );
178
180
goto error ;
179
181
}
180
182
181
- vport -> dev = alloc_netdev (sizeof (struct internal_dev ),
182
- parms -> name , NET_NAME_USER , do_setup );
183
+ dev = alloc_netdev (sizeof (struct internal_dev ),
184
+ parms -> name , NET_NAME_USER , do_setup );
185
+ vport -> dev = dev ;
183
186
if (!vport -> dev ) {
184
187
err = - ENOMEM ;
185
188
goto error_free_vport ;
@@ -200,8 +203,10 @@ static struct vport *internal_dev_create(const struct vport_parms *parms)
200
203
201
204
rtnl_lock ();
202
205
err = register_netdevice (vport -> dev );
203
- if (err )
206
+ if (err ) {
207
+ free_vport = false;
204
208
goto error_unlock ;
209
+ }
205
210
206
211
dev_set_promiscuity (vport -> dev , 1 );
207
212
rtnl_unlock ();
@@ -211,11 +216,12 @@ static struct vport *internal_dev_create(const struct vport_parms *parms)
211
216
212
217
error_unlock :
213
218
rtnl_unlock ();
214
- free_percpu (vport -> dev -> tstats );
219
+ free_percpu (dev -> tstats );
215
220
error_free_netdev :
216
- free_netdev (vport -> dev );
221
+ free_netdev (dev );
217
222
error_free_vport :
218
- ovs_vport_free (vport );
223
+ if (free_vport )
224
+ ovs_vport_free (vport );
219
225
error :
220
226
return ERR_PTR (err );
221
227
}
You can’t perform that action at this time.
0 commit comments