|
@@ -1077,7 +1077,7 @@ extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page,
|
|
int off, int size);
|
|
int off, int size);
|
|
|
|
|
|
#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags)
|
|
#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags)
|
|
-#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list)
|
|
|
|
|
|
+#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frags(skb))
|
|
#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb))
|
|
#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb))
|
|
|
|
|
|
#ifdef NET_SKBUFF_DATA_USES_OFFSET
|
|
#ifdef NET_SKBUFF_DATA_USES_OFFSET
|
|
@@ -1716,6 +1716,25 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
|
|
skb = skb->prev)
|
|
skb = skb->prev)
|
|
|
|
|
|
|
|
|
|
|
|
+static inline bool skb_has_frags(const struct sk_buff *skb)
|
|
|
|
+{
|
|
|
|
+ return skb_shinfo(skb)->frag_list != NULL;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void skb_frag_list_init(struct sk_buff *skb)
|
|
|
|
+{
|
|
|
|
+ skb_shinfo(skb)->frag_list = NULL;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void skb_frag_add_head(struct sk_buff *skb, struct sk_buff *frag)
|
|
|
|
+{
|
|
|
|
+ frag->next = skb_shinfo(skb)->frag_list;
|
|
|
|
+ skb_shinfo(skb)->frag_list = frag;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#define skb_walk_frags(skb, iter) \
|
|
|
|
+ for (iter = skb_shinfo(skb)->frag_list; iter; iter = iter->next)
|
|
|
|
+
|
|
extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
|
|
extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
|
|
int *peeked, int *err);
|
|
int *peeked, int *err);
|
|
extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags,
|
|
extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags,
|