mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +00:00
dpif-netdev: Clear flow batches before execute.
When executing actions, it's possible a recirculation will occur causing dp_netdev_input() to be called multiple times. If the batch pointers embedded in dp_netdev_flow aren't cleared, it's possible packets after the recirculation will be reinserted into a batch associated with the original lookup. This could be very bad. This patch fixes the problem by zeroing out flow batch pointers before calling packet_batch_execute(). This probably has a slightly negative performance impact, though I haven't tried it. Signed-off-by: Ethan Jackson <ethan@nicira.com> Acked-by: Daniele Di Proietto <diproiettod@vmware.com>
This commit is contained in:
@@ -3066,7 +3066,6 @@ packet_batch_execute(struct packet_batch *batch,
|
||||
struct dp_netdev_actions *actions;
|
||||
struct dp_netdev_flow *flow = batch->flow;
|
||||
|
||||
flow->batch = NULL;
|
||||
dp_netdev_flow_used(flow, batch->packet_count, batch->byte_count,
|
||||
batch->tcp_flags, now);
|
||||
|
||||
@@ -3298,6 +3297,10 @@ dp_netdev_input(struct dp_netdev_pmd_thread *pmd,
|
||||
fast_path_processing(pmd, packets, newcnt, keys, batches, &n_batches);
|
||||
}
|
||||
|
||||
for (i = 0; i < n_batches; i++) {
|
||||
batches[i].flow->batch = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < n_batches; i++) {
|
||||
packet_batch_execute(&batches[i], pmd, now);
|
||||
}
|
||||
|
Reference in New Issue
Block a user