diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2008-04-14 00:04:12 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-14 00:04:12 -0700 |
commit | f525c06d12b72cddb085df7f6f348c3c5a39b3ce (patch) | |
tree | b2b919ff924d0feb3c8cb1b565a001949ec92270 | |
parent | 0912ea38de61378c5c753aef78c12e2f95854313 (diff) | |
download | kernel_samsung_smdk4412-f525c06d12b72cddb085df7f6f348c3c5a39b3ce.zip kernel_samsung_smdk4412-f525c06d12b72cddb085df7f6f348c3c5a39b3ce.tar.gz kernel_samsung_smdk4412-f525c06d12b72cddb085df7f6f348c3c5a39b3ce.tar.bz2 |
[SKB]: __skb_dequeue = skb_peek + __skb_unlink
By rearranging the order of declarations, __skb_dequeue() is expressed in terms of
* skb_peek() and
* __skb_unlink(),
thus in effect mirroring the analogue implementation of __skb_dequeue_tail().
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/skbuff.h | 47 |
1 files changed, 16 insertions, 31 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index e517701..c211620 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -734,35 +734,6 @@ static inline void __skb_queue_tail(struct sk_buff_head *list, next->prev = prev->next = newsk; } - -/** - * __skb_dequeue - remove from the head of the queue - * @list: list to dequeue from - * - * Remove the head of the list. This function does not take any locks - * so must be used with appropriate locks held only. The head item is - * returned or %NULL if the list is empty. - */ -extern struct sk_buff *skb_dequeue(struct sk_buff_head *list); -static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list) -{ - struct sk_buff *next, *prev, *result; - - prev = (struct sk_buff *) list; - next = prev->next; - result = NULL; - if (next != prev) { - result = next; - next = next->next; - list->qlen--; - next->prev = prev; - prev->next = next; - result->next = result->prev = NULL; - } - return result; -} - - /* * Insert a packet on a list. */ @@ -803,8 +774,22 @@ static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list) prev->next = next; } - -/* XXX: more streamlined implementation */ +/** + * __skb_dequeue - remove from the head of the queue + * @list: list to dequeue from + * + * Remove the head of the list. This function does not take any locks + * so must be used with appropriate locks held only. The head item is + * returned or %NULL if the list is empty. + */ +extern struct sk_buff *skb_dequeue(struct sk_buff_head *list); +static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list) +{ + struct sk_buff *skb = skb_peek(list); + if (skb) + __skb_unlink(skb, list); + return skb; +} /** * __skb_dequeue_tail - remove from the tail of the queue |