> On Apr 14, 2015, at 1:41 PM, Ben Pfaff <b...@nicira.com> wrote: > > On Tue, Apr 14, 2015 at 08:25:59PM +0000, Sorin Vinturis wrote: >> The nl_sock_transact_multiple function enters in an infinite loop, >> when invalid error, EINVAL, is returned by nl_sock_transact_multiple__. >> EINVAL is the error returned by the latter function when a driver >> request fails. >> >> Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com> >> Reported-by: Alin Gabriel Serdean <aserd...@cloudbasesolutions.com> >> Reported-at: >> https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openvswitch_ovs-2Dissues_issues_57&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pNHQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=BCtSQ7DHL7pHXhiSkvwQK8-jnNwHwzs2l6FydHeVFQ4&s=tmLYKmqY4znbvlzSXVB3tkTwuwrgghsF_B-VbbhLHdw&e= >> > > I see that this fixes a bug, even on Linux. Thank you. It's actually > a pretty serious bug (given the infinite loop), but I guess that it > must not occur in any normal circumstances, otherwise we would have > heard about it over the years. > > However, I want to make sure of something before I commit it. > nl_sock_transact_multiple__() should only return an error in the case > of a "transport" error, that is, of some problem communicating with > the datapath (e.g. the kernel module has been removed or something > similarly fatal). It should not return an error in cases where some > message asks the datapath to do something erroneous (e.g. to add a > flow that the datapath doesn't understand, to delete a vport that > doesn't exist, ...). This is because only in the former case should > all of the transactions be aborted; in the latter case, any remaining > transactions should still be processed.
Ben, What is the genetlink semantics for returning an error from the OVS module in Linux. I looked at the OVS code, and it returns -EINVAL if it runs into a condition of invalid input (eg. flow with key & UFID missing). If OVS module returns -EINVAL, does Linux’s netlink layer massage the message to insert the error into a ‘struct nlmsgerr’, and return 0? We have a little confusion about that. We currently return the error (and also the struct nlmsgerr) in the equivalent of recvmsg(). thanks, -- Nithin _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev