tcp: Use SKB queue handling interfaces instead of by-hand versions.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1164f52a24
commit
cd07a8ea0d
|
@ -1181,49 +1181,45 @@ static inline void tcp_write_queue_purge(struct sock *sk)
|
||||||
|
|
||||||
static inline struct sk_buff *tcp_write_queue_head(struct sock *sk)
|
static inline struct sk_buff *tcp_write_queue_head(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb = sk->sk_write_queue.next;
|
return skb_peek(&sk->sk_write_queue);
|
||||||
if (skb == (struct sk_buff *) &sk->sk_write_queue)
|
|
||||||
return NULL;
|
|
||||||
return skb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct sk_buff *tcp_write_queue_tail(struct sock *sk)
|
static inline struct sk_buff *tcp_write_queue_tail(struct sock *sk)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb = sk->sk_write_queue.prev;
|
return skb_peek_tail(&sk->sk_write_queue);
|
||||||
if (skb == (struct sk_buff *) &sk->sk_write_queue)
|
|
||||||
return NULL;
|
|
||||||
return skb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct sk_buff *tcp_write_queue_next(struct sock *sk, struct sk_buff *skb)
|
static inline struct sk_buff *tcp_write_queue_next(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
return skb->next;
|
return skb_queue_next(&sk->sk_write_queue, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define tcp_for_write_queue(skb, sk) \
|
#define tcp_for_write_queue(skb, sk) \
|
||||||
for (skb = (sk)->sk_write_queue.next; \
|
skb_queue_walk(&(sk)->sk_write_queue, skb)
|
||||||
(skb != (struct sk_buff *)&(sk)->sk_write_queue); \
|
|
||||||
skb = skb->next)
|
|
||||||
|
|
||||||
#define tcp_for_write_queue_from(skb, sk) \
|
#define tcp_for_write_queue_from(skb, sk) \
|
||||||
for (; (skb != (struct sk_buff *)&(sk)->sk_write_queue);\
|
skb_queue_walk_from(&(sk)->sk_write_queue, skb)
|
||||||
skb = skb->next)
|
|
||||||
|
|
||||||
#define tcp_for_write_queue_from_safe(skb, tmp, sk) \
|
#define tcp_for_write_queue_from_safe(skb, tmp, sk) \
|
||||||
for (tmp = skb->next; \
|
skb_queue_walk_from_safe(&(sk)->sk_write_queue, skb, tmp)
|
||||||
(skb != (struct sk_buff *)&(sk)->sk_write_queue); \
|
|
||||||
skb = tmp, tmp = skb->next)
|
|
||||||
|
|
||||||
static inline struct sk_buff *tcp_send_head(struct sock *sk)
|
static inline struct sk_buff *tcp_send_head(struct sock *sk)
|
||||||
{
|
{
|
||||||
return sk->sk_send_head;
|
return sk->sk_send_head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool tcp_skb_is_last(const struct sock *sk,
|
||||||
|
const struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
return skb_queue_is_last(&sk->sk_write_queue, skb);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void tcp_advance_send_head(struct sock *sk, struct sk_buff *skb)
|
static inline void tcp_advance_send_head(struct sock *sk, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
sk->sk_send_head = skb->next;
|
if (tcp_skb_is_last(sk, skb))
|
||||||
if (sk->sk_send_head == (struct sk_buff *)&sk->sk_write_queue)
|
|
||||||
sk->sk_send_head = NULL;
|
sk->sk_send_head = NULL;
|
||||||
|
else
|
||||||
|
sk->sk_send_head = tcp_write_queue_next(sk, skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unlinked)
|
static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unlinked)
|
||||||
|
@ -1284,12 +1280,6 @@ static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk)
|
||||||
__skb_unlink(skb, &sk->sk_write_queue);
|
__skb_unlink(skb, &sk->sk_write_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool tcp_skb_is_last(const struct sock *sk,
|
|
||||||
const struct sk_buff *skb)
|
|
||||||
{
|
|
||||||
return skb_queue_is_last(&sk->sk_write_queue, skb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int tcp_write_queue_empty(struct sock *sk)
|
static inline int tcp_write_queue_empty(struct sock *sk)
|
||||||
{
|
{
|
||||||
return skb_queue_empty(&sk->sk_write_queue);
|
return skb_queue_empty(&sk->sk_write_queue);
|
||||||
|
|
Loading…
Reference in New Issue