Hi Ales,

I was chatting with Xavier this morning about this.

On 6/16/26 7:42 PM, Ales Musil wrote:
>>>  /* Table of ipv6_ra_state structures, keyed on logical port name.
>>> @@ -4724,14 +4722,15 @@ pinctrl_wait(struct ovsdb_idl_txn *ovnsb_idl_txn)
>>>  {
>>>      ovs_mutex_lock(&pinctrl_mutex);
>>>      if (ovnsb_idl_txn) {
>> Not related to this pach, but why did we ever need to do the check only
>> if ovnsb_idl_txn?
>>
>> I think https://github.com/ovn-org/ovn/commit/d305d9f shouldn't have
>> needed to add it at all, right?
>>
> Yeah I think that was a mistake.
> 

Looking closer at the code, it wasn't a mistake.

It actually prevents busy loops in ovn-controller if the SB is slow(er)
and we have longer periods in ovn-controller with a transaction in
flight _and_ also pending controller events and vport bindings.

If we remove the txn check, we'd busy loop in ovn-controller until the
SB commits the currently in-flight transaction.

> 
>>> -        wait_put_mac_bindings();
>>>          wait_controller_event();
>>>          wait_put_vport_bindings();
>>> -        wait_put_fdbs();
>>>          seq_wait(pinctrl_main_seq, main_seq);
>>>      }
>>>      wait_activated_ports();

This one, wait_activated_ports(), is probably OK as we don't seem to
need SB access for updating the state of these ports.

>>>      ovs_mutex_unlock(&pinctrl_mutex);
>>> +
>>> +    wait_put_mac_bindings();
>>> +    wait_put_fdbs();

But this means we should also guard these two with an if (ovnsb_idl_txn).

What do you think?

>>>  }

Regards,
Dumitru

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

Reply via email to