projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Introduce general-purpose ways to wait for dpif and netdev changes.
[openvswitch]
/
datapath
/
datapath.c
diff --git
a/datapath/datapath.c
b/datapath/datapath.c
index f76b51f998d975e6fa337d7b87539d45819257dc..14779a60ff41bbc24d0ee5072f74cc8dfcdd20d9 100644
(file)
--- a/
datapath/datapath.c
+++ b/
datapath/datapath.c
@@
-1168,8
+1168,7
@@
error:
return err;
}
return err;
}
-static int
-get_dp_stats(struct datapath *dp, struct odp_stats __user *statsp)
+static int get_dp_stats(struct datapath *dp, struct odp_stats __user *statsp)
{
struct odp_stats stats;
int i;
{
struct odp_stats stats;
int i;
@@
-1261,7
+1260,7
@@
list_ports(struct datapath *dp, struct odp_portvec __user *pvp)
break;
}
}
break;
}
}
- return put_user(
idx
, &pvp->n_ports);
+ return put_user(
dp->n_ports
, &pvp->n_ports);
}
/* RCU callback for freeing a dp_port_group */
}
/* RCU callback for freeing a dp_port_group */
@@
-1345,24
+1344,28
@@
static long openvswitch_ioctl(struct file *f, unsigned int cmd,
/* Handle commands with special locking requirements up front. */
switch (cmd) {
case ODP_DP_CREATE:
/* Handle commands with special locking requirements up front. */
switch (cmd) {
case ODP_DP_CREATE:
- return create_dp(dp_idx, (char __user *)argp);
+ err = create_dp(dp_idx, (char __user *)argp);
+ goto exit;
case ODP_DP_DESTROY:
case ODP_DP_DESTROY:
- return destroy_dp(dp_idx);
+ err = destroy_dp(dp_idx);
+ goto exit;
case ODP_PORT_ADD:
case ODP_PORT_ADD:
- return add_port(dp_idx, (struct odp_port __user *)argp);
+ err = add_port(dp_idx, (struct odp_port __user *)argp);
+ goto exit;
case ODP_PORT_DEL:
err = get_user(port_no, (int __user *)argp);
case ODP_PORT_DEL:
err = get_user(port_no, (int __user *)argp);
- if (err)
-
break
;
-
return del_port(dp_idx, port_no)
;
+ if (
!
err)
+
err = del_port(dp_idx, port_no)
;
+
goto exit
;
}
dp = get_dp_locked(dp_idx);
}
dp = get_dp_locked(dp_idx);
+ err = -ENODEV;
if (!dp)
if (!dp)
-
return -ENODEV
;
+
goto exit
;
switch (cmd) {
case ODP_DP_STATS:
switch (cmd) {
case ODP_DP_STATS:
@@
-1444,6
+1447,7
@@
static long openvswitch_ioctl(struct file *f, unsigned int cmd,
break;
}
mutex_unlock(&dp->mutex);
break;
}
mutex_unlock(&dp->mutex);
+exit:
return err;
}
return err;
}