[ovs-dev] [PATCH 04/10] dpif-linux: Consolidate buffer usage in flow_dump_next().
Joe Stringer
joestringer at nicira.com
Fri Jan 10 19:43:09 UTC 2014
This patch simplifies buffer usage in dpif_linux_flow_dump_next() in
preparation for later changes.
Signed-off-by: Joe Stringer <joestringer at nicira.com>
---
lib/dpif-linux.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/lib/dpif-linux.c b/lib/dpif-linux.c
index ed824a6..d985f4b 100644
--- a/lib/dpif-linux.c
+++ b/lib/dpif-linux.c
@@ -1010,7 +1010,7 @@ dpif_linux_flow_dump_start(const struct dpif *dpif_, void **statep)
nl_dump_start(&state->dump, NETLINK_GENERIC, buf);
ofpbuf_delete(buf);
- state->buf = NULL;
+ state->buf = ofpbuf_new(1024);
return 0;
}
@@ -1027,10 +1027,7 @@ dpif_linux_flow_dump_next(const struct dpif *dpif_ OVS_UNUSED, void *state_,
int error;
do {
- ofpbuf_delete(state->buf);
- state->buf = NULL;
-
- if (!nl_dump_next(&state->dump, &buf, &state->dump.buffer)) {
+ if (!nl_dump_next(&state->dump, &buf, state->buf)) {
return EOF;
}
@@ -1040,9 +1037,16 @@ dpif_linux_flow_dump_next(const struct dpif *dpif_ OVS_UNUSED, void *state_,
}
if (actions && !state->flow.actions) {
+ struct ofpbuf *tmp_buf = NULL;
+
error = dpif_linux_flow_get__(dpif_, state->flow.key,
state->flow.key_len,
- &state->flow, &state->buf);
+ &state->flow, &tmp_buf);
+ if (tmp_buf) {
+ ofpbuf_delete(state->buf);
+ state->buf = tmp_buf;
+ }
+
if (error == ENOENT) {
VLOG_DBG("dumped flow disappeared on get");
} else if (error) {
--
1.7.9.5
More information about the dev
mailing list