diff options
Diffstat (limited to 'net/tipc/name_distr.c')
-rw-r--r-- | net/tipc/name_distr.c | 33 |
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 | */ |
386 | void tipc_named_rcv(struct net *net, struct sk_buff *buf) | 386 | void 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 | /** |