Hi all,

While using out patches for HW offload we've noticed we get a ovs assertion at transition ukey, which tries to
transition the ukey state from EVICTED back to OPERATIONAL.
With furthur investigation it seem that this can happen without our HW offload patches as there might be a race between handle_upcalls and revalidate.

The procedure is as such:

handle_upcalls receives a new upcall and creates a new ukey, its state is VISIBLE, it then it installs a flow (FLOW_PUT) to the datapat and upon success wants to set the ukey state to OPERATIONAL (line 1408). for that the handler running handle_upcalls wants to reaquirce the ukey lock, but in the meantime revalidators dump (line 2261) the already inserted flow and want to delete this flow (line 2328, say because of openflow db changes, or aging). The revalidator deletes the flow and moves the ukey from VISIBLE -> OPERATIONAL (line 2320) -> EVICTING (line 2220) -> EVICTED (line 2134)

finally handler succesfuly acquires the flow and now set the state to OPERERTIONAL which will cause the assert in transition_ukey.

Line numbers in question are from ofproto/ofproto-dpif-upcall.c

I can provide a test the could show this happening, basicly adding a sleep before (writing it now).

Thanks,
Paul Blakey.



_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to