tipc: use skb_queue_walk_safe marco to simplify link_prepare_wakeup routine
authorYing Xue <ying.xue@windriver.com>
Wed, 26 Nov 2014 03:41:51 +0000 (11:41 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 26 Nov 2014 17:30:17 +0000 (12:30 -0500)
Signed-off-by: Ying Xue <ying.xue@windriver.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/link.c

index 8eb885eb14336dbc55e10b91c5f38d1e1986003a..ddee498e74bc9229447e5f54e63dde1a9a6c2c5d 100644 (file)
@@ -367,15 +367,15 @@ static bool link_schedule_user(struct tipc_link *link, u32 oport,
  */
 static void link_prepare_wakeup(struct tipc_link *link)
 {
-       struct sk_buff_head *wq = &link->waiting_sks;
-       struct sk_buff *buf;
        uint pend_qsz = link->out_queue_size;
+       struct sk_buff *skb, *tmp;
 
-       for (buf = skb_peek(wq); buf; buf = skb_peek(wq)) {
-               if (pend_qsz >= link->queue_limit[TIPC_SKB_CB(buf)->chain_imp])
+       skb_queue_walk_safe(&link->waiting_sks, skb, tmp) {
+               if (pend_qsz >= link->queue_limit[TIPC_SKB_CB(skb)->chain_imp])
                        break;
-               pend_qsz += TIPC_SKB_CB(buf)->chain_sz;
-               __skb_queue_tail(&link->owner->waiting_sks, __skb_dequeue(wq));
+               pend_qsz += TIPC_SKB_CB(skb)->chain_sz;
+               __skb_unlink(skb, &link->waiting_sks);
+               __skb_queue_tail(&link->owner->waiting_sks, skb);
        }
 }