aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/name_distr.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/name_distr.c')
-rw-r--r--net/tipc/name_distr.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/net/tipc/name_distr.c b/net/tipc/name_distr.c
index dd8564cd9dbb..fcb07915aaac 100644
--- a/net/tipc/name_distr.c
+++ b/net/tipc/name_distr.c
@@ -381,25 +381,34 @@ void tipc_named_process_backlog(struct net *net)
381} 381}
382 382
383/** 383/**
384 * tipc_named_rcv - process name table update message sent by another node 384 * tipc_named_rcv - process name table update messages sent by another node
385 */ 385 */
386void tipc_named_rcv(struct net *net, struct sk_buff *buf) 386void tipc_named_rcv(struct net *net, struct sk_buff_head *inputq)
387{ 387{
388 struct tipc_net *tn = net_generic(net, tipc_net_id); 388 struct tipc_net *tn = net_generic(net, tipc_net_id);
389 struct tipc_msg *msg = buf_msg(buf); 389 struct tipc_msg *msg;
390 struct distr_item *item = (struct distr_item *)msg_data(msg); 390 struct distr_item *item;
391 u32 count = msg_data_sz(msg) / ITEM_SIZE; 391 uint count;
392 u32 node = msg_orignode(msg); 392 u32 node;
393 struct sk_buff *skb;
394 int mtype;
393 395
394 spin_lock_bh(&tn->nametbl_lock); 396 spin_lock_bh(&tn->nametbl_lock);
395 while (count--) { 397 for (skb = skb_dequeue(inputq); skb; skb = skb_dequeue(inputq)) {
396 if (!tipc_update_nametbl(net, item, node, msg_type(msg))) 398 msg = buf_msg(skb);
397 tipc_named_add_backlog(item, msg_type(msg), node); 399 mtype = msg_type(msg);
398 item++; 400 item = (struct distr_item *)msg_data(msg);
401 count = msg_data_sz(msg) / ITEM_SIZE;
402 node = msg_orignode(msg);
403 while (count--) {
404 if (!tipc_update_nametbl(net, item, node, mtype))
405 tipc_named_add_backlog(item, mtype, node);
406 item++;
407 }
408 kfree_skb(skb);
409 tipc_named_process_backlog(net);
399 } 410 }
400 tipc_named_process_backlog(net);
401 spin_unlock_bh(&tn->nametbl_lock); 411 spin_unlock_bh(&tn->nametbl_lock);
402 kfree_skb(buf);
403} 412}
404 413
405/** 414/**