On 4/7/22 15:53, lic121 wrote:
During the revalidation, mirror could be removed. Instead of crash
the process, we can simply skip the deleted mirror.
Fixes: ec7ceaed4f3e ("ofproto-dpif: Modularize mirror code.")
Signed-off-by: lic121 <[email protected]>
---
ofproto/ofproto-dpif-xlate.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 5a770f1..33e56c2 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -2142,9 +2142,13 @@ mirror_packet(struct xlate_ctx *ctx, struct xbundle
*xbundle,
int snaplen;
/* Get the details of the mirror represented by the rightmost 1-bit. */
- ovs_assert(mirror_get(xbridge->mbridge, raw_ctz(mirrors),
- &vlans, &dup_mirrors,
- &out, &snaplen, &out_vlan));
+ if (!mirror_get(xbridge->mbridge, raw_ctz(mirrors),
+ &vlans, &dup_mirrors,
+ &out, &snaplen, &out_vlan)) {
+ /* Mirror could be deleted during revalidation */
+ mirrors = zero_rightmost_1bit(mirrors);
+ continue;
+ }
/* If this mirror selects on the basis of VLAN, and it does not select
I have reproduced the assert and verified this patch fixes it.
The patch looks good to me. My only nit is about the comment, it's a bit
confusing because this code is executed also in upcall handling, not only on
revalidation. Something on the lines of the following would be a bit more clear
IMHO:
/* The mirror got reconfigured before we got to read it's configuration. */
Also, maybe add OVS_UNLIKELY?
Thanks.
--
Adrián Moreno
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev