On 16.11.2016 16:18, Ido Schimmel wrote: > Hi Hannes, > > On Wed, Nov 16, 2016 at 03:51:01PM +0100, Hannes Frederic Sowa wrote: >> On 16.11.2016 15:09, Jiri Pirko wrote: >>> From: Ido Schimmel <ido...@mellanox.com> >>> >>> Commit b90eb7549499 ("fib: introduce FIB notification infrastructure") >>> introduced a new notification chain to notify listeners (f.e., switchdev >>> drivers) about addition and deletion of routes. >>> >>> However, upon registration to the chain the FIB tables can already be >>> populated, which means potential listeners will have an incomplete view >>> of the tables. >>> >>> Solve that by adding an API to request a FIB dump. The dump itself it >>> done using RCU in order not to starve consumers that need RTNL to make >>> progress. >>> >>> Signed-off-by: Ido Schimmel <ido...@mellanox.com> >>> Signed-off-by: Jiri Pirko <j...@mellanox.com> >> >> Have you looked at potential inconsistencies resulting of RCU walking >> the table and having concurrent inserts? > > Yes. I did try to think about situations in which this approach will > fail, but I could only find problems with concurrent removals, which I > addressed in 5/8. In case of concurrent insertions, even if you missed > the node, you would still get the ENTRY_ADD event to your listener.
Theoretically a node could still be installed while the deletion event fired before registering the notifier. E.g. a synchronize_net before dumping could help here? I don't know how you prepare the data structures for inserting in into the hardware, but if ordering matters, the notifier for a delete event can be called before the dump installed the fib entry? E.g. you also don't check what events are already queued in the delayed work queue so far. I hope I understand the patches correctly? Thanks, Hannes