Hi Jon, In my reproduction, I'm seeing the problem either tipc-config. I guest almost systems were not using as special service type as my test, then all node state service type fit in one skb.
Regards, Hoang -----Original Message----- From: Jon Maloy <[email protected]> Sent: Tuesday, April 9, 2019 5:39 AM To: Hoang Huu Le <[email protected]>; [email protected]; [email protected]; [email protected] Subject: RE: [net] tipc: missing entries in name table of publications Nice job. I am just flabbergasted by the fact that this seems to be a bug that has always been around, and still it wasn't seen until now, with all the systems with huge name tables we have running around in the world. Maybe most people are still using "tipc-config".... Acked-by: Jon Maloy <[email protected]> > -----Original Message----- > From: Hoang Le <[email protected]> > Sent: 8-Apr-19 07:08 > To: Jon Maloy <[email protected]>; [email protected]; > [email protected]; [email protected] > Subject: [net] tipc: missing entries in name table of publications > > When binding multiple services with specific type 1Ki, 2Ki.., this leads to > some > entries in the name table of publications missing when listed out via 'tipc > name show'. > > The problem is at identify zero last_type conditional provided via netlink. > The > first is initial 'type' when starting name table dummping. The second is > continuously with zero type (node state service type). Then, lookup function > failure to finding node state service type next iteration. > > To solve this, adding more conditional to marked as dirty type and lookup > correct service type for the next iteration instead of select the first > service as > initial 'type' zero. > > Signed-off-by: Hoang Le <[email protected]> > --- > net/tipc/name_table.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c index > bff241f03525..89993afe0fbd 100644 > --- a/net/tipc/name_table.c > +++ b/net/tipc/name_table.c > @@ -909,7 +909,8 @@ static int tipc_nl_service_list(struct net *net, struct > tipc_nl_msg *msg, > for (; i < TIPC_NAMETBL_SIZE; i++) { > head = &tn->nametbl->services[i]; > > - if (*last_type) { > + if (*last_type || > + (!i && *last_key && (*last_lower == *last_key))) { > service = tipc_service_find(net, *last_type); > if (!service) > return -EPIPE; > -- > 2.17.1 _______________________________________________ tipc-discussion mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tipc-discussion
