forked from luck/tmp_suning_uos_patched
[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>
This commit is contained in:
parent
0912ea38de
commit
f525c06d12
|
@ -734,35 +734,6 @@ static inline void __skb_queue_tail(struct sk_buff_head *list,
|
||||||
next->prev = prev->next = newsk;
|
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.
|
* 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;
|
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
|
* __skb_dequeue_tail - remove from the tail of the queue
|
||||||
|
|
Loading…
Reference in New Issue
Block a user