提交 249c8b42 编写于 作者: D David S. Miller

net: Add skb_queue_next().

A lot of code wants to iterate over an SKB queue at the top level using
it's own control structure and iterator scheme.

Provide skb_queue_next(), which is only valid to invoke if
skb_queue_is_last() returns false.
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 d258b491
...@@ -485,6 +485,24 @@ static inline bool skb_queue_is_last(const struct sk_buff_head *list, ...@@ -485,6 +485,24 @@ static inline bool skb_queue_is_last(const struct sk_buff_head *list,
return (skb->next == (struct sk_buff *) list); return (skb->next == (struct sk_buff *) list);
} }
/**
* skb_queue_next - return the next packet in the queue
* @list: queue head
* @skb: current buffer
*
* Return the next packet in @list after @skb. It is only valid to
* call this if skb_queue_is_last() evaluates to false.
*/
static inline struct sk_buff *skb_queue_next(const struct sk_buff_head *list,
const struct sk_buff *skb)
{
/* This BUG_ON may seem severe, but if we just return then we
* are going to dereference garbage.
*/
BUG_ON(skb_queue_is_last(list, skb));
return skb->next;
}
/** /**
* skb_get - reference buffer * skb_get - reference buffer
* @skb: buffer to reference * @skb: buffer to reference
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册