net: Update sk_buff flag bit availability comment.
[deliverable/linux.git] / include / linux / skbuff.h
index 11c270551d25dde53babf59f522a754b278f6dbf..b69b7b512c064d68956fd66c9f7f85d2b9ef42eb 100644 (file)
@@ -452,6 +452,7 @@ static inline u32 skb_mstamp_us_delta(const struct skb_mstamp *t1,
  *     @tc_verd: traffic control verdict
  *     @hash: the packet hash
  *     @queue_mapping: Queue mapping for multiqueue devices
+ *     @xmit_more: More SKBs are pending for this queue
  *     @ndisc_nodetype: router type (from link layer)
  *     @ooo_okay: allow the mapping of a socket to a queue to be changed
  *     @l4_hash: indicate hash is a canonical 4-tuple hash over transport
@@ -558,6 +559,7 @@ struct sk_buff {
 
        __u16                   queue_mapping;
        kmemcheck_bitfield_begin(flags2);
+       __u8                    xmit_more:1;
 #ifdef CONFIG_IPV6_NDISC_NODETYPE
        __u8                    ndisc_nodetype:2;
 #endif
@@ -578,7 +580,7 @@ struct sk_buff {
        __u8                    encap_hdr_csum:1;
        __u8                    csum_valid:1;
        __u8                    csum_complete_sw:1;
-       /* 2/4 bit hole (depending on ndisc_nodetype presence) */
+       /* 1/3 bit hole (depending on ndisc_nodetype presence) */
        kmemcheck_bitfield_end(flags2);
 
 #if defined CONFIG_NET_DMA || defined CONFIG_NET_RX_BUSY_POLL
@@ -2555,6 +2557,7 @@ int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, int shiftlen);
 void skb_scrub_packet(struct sk_buff *skb, bool xnet);
 unsigned int skb_gso_transport_seglen(const struct sk_buff *skb);
 struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
+struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
 
 struct skb_checksum_ops {
        __wsum (*update)(const void *mem, int len, __wsum wsum);
@@ -2566,20 +2569,26 @@ __wsum __skb_checksum(const struct sk_buff *skb, int offset, int len,
 __wsum skb_checksum(const struct sk_buff *skb, int offset, int len,
                    __wsum csum);
 
-static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
-                                      int len, void *buffer)
+static inline void *__skb_header_pointer(const struct sk_buff *skb, int offset,
+                                        int len, void *data, int hlen, void *buffer)
 {
-       int hlen = skb_headlen(skb);
-
        if (hlen - offset >= len)
-               return skb->data + offset;
+               return data + offset;
 
-       if (skb_copy_bits(skb, offset, buffer, len) < 0)
+       if (!skb ||
+           skb_copy_bits(skb, offset, buffer, len) < 0)
                return NULL;
 
        return buffer;
 }
 
+static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
+                                      int len, void *buffer)
+{
+       return __skb_header_pointer(skb, offset, len, skb->data,
+                                   skb_headlen(skb), buffer);
+}
+
 /**
  *     skb_needs_linearize - check if we need to linearize a given skb
  *                           depending on the given device features.
This page took 0.044893 seconds and 5 git commands to generate.