Any comments on this patch? /partha
On 08/17/2016 08:03 AM, Parthasarathy Bhuvaragan wrote: > In a dual bearer configuration, if the second tipc link becomes > active while the first link still has pending nametable "bulk" > updates, it randomly leads to reset of the second link. > > When a link is established, the function named_distribute(), > fills the skb based on node mtu (allows room for TUNNEL_PROTOCOL) > with NAME_DISTRIBUTOR message for each PUBLICATION. > However, the function named_distribute() allocates the buffer by > increasing the node mtu by INT_H_SIZE (to insert NAME_DISTRIBUTOR). > This consumes the space allocated for TUNNEL_PROTOCOL. > > When establishing the second link, the link shall tunnel all the > messages in the first link queue including the "bulk" update. > As size of the NAME_DISTRIBUTOR messages while tunnelling, exceeds > the link mtu the transmission fails (-EMSGSIZE). > > Thus, the synch point based on the message count of the tunnel > packets is never reached leading to link timeout. > > In this commit, we adjust the size of name distributor message so that > they can be tunnelled. > > Signed-off-by: Parthasarathy Bhuvaragan > <parthasarathy.bhuvara...@ericsson.com> > --- > v2: -Replaced "uint" type with "u32" for the variables. > -Shortened commit message > -Submitting the series to net instead > --- > net/tipc/name_distr.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/net/tipc/name_distr.c b/net/tipc/name_distr.c > index 6b626a64b517..7bc55b61ff4f 100644 > --- a/net/tipc/name_distr.c > +++ b/net/tipc/name_distr.c > @@ -62,6 +62,8 @@ static void publ_to_item(struct distr_item *i, struct > publication *p) > > /** > * named_prepare_buf - allocate & initialize a publication message > + * > + * The buffer returned is of size INT_H_SIZE + payload size > */ > static struct sk_buff *named_prepare_buf(struct net *net, u32 type, u32 size, > u32 dest) > @@ -141,9 +143,9 @@ static void named_distribute(struct net *net, struct > sk_buff_head *list, > struct publication *publ; > struct sk_buff *skb = NULL; > struct distr_item *item = NULL; > - uint msg_dsz = (tipc_node_get_mtu(net, dnode, 0) / ITEM_SIZE) * > - ITEM_SIZE; > - uint msg_rem = msg_dsz; > + u32 msg_dsz = roundup(tipc_node_get_mtu(net, dnode, 0) - INT_H_SIZE, > + ITEM_SIZE); > + u32 msg_rem = msg_dsz; > > list_for_each_entry(publ, pls, local_list) { > /* Prepare next buffer: */ ------------------------------------------------------------------------------ _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion