[NET] gso: Add skb_is_gso
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 8 Jul 2006 20:34:32 +0000 (13:34 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 8 Jul 2006 20:34:32 +0000 (13:34 -0700)
This patch adds the wrapper function skb_is_gso which can be used instead
of directly testing skb_shinfo(skb)->gso_size.  This makes things a little
nicer and allows us to change the primary key for indicating whether an skb
is GSO (if we ever want to do that).

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
18 files changed:
drivers/net/bnx2.c
drivers/net/chelsio/sge.c
drivers/net/e1000/e1000_main.c
drivers/net/forcedeth.c
drivers/net/ixgb/ixgb_main.c
drivers/net/loopback.c
drivers/net/myri10ge/myri10ge.c
drivers/net/sky2.c
drivers/net/typhoon.c
drivers/s390/net/qeth_main.c
include/linux/netdevice.h
include/linux/skbuff.h
net/bridge/br_forward.c
net/bridge/br_netfilter.c
net/ipv4/ip_output.c
net/ipv4/xfrm4_output.c
net/ipv6/ip6_output.c
net/ipv6/xfrm6_output.c

index 64b6a72b4f6a9590364c9c19ddc4c8bb5c5280aa..db73de0d25117339ede7074548003cec7986bddf 100644 (file)
@@ -1639,7 +1639,7 @@ bnx2_tx_int(struct bnx2 *bp)
                skb = tx_buf->skb;
 #ifdef BCM_TSO 
                /* partial BD completions possible with TSO packets */
-               if (skb_shinfo(skb)->gso_size) {
+               if (skb_is_gso(skb)) {
                        u16 last_idx, last_ring_idx;
 
                        last_idx = sw_cons +
index 87f94d939ff832a198a98bd9d26fc285238e8b2e..61b3754f50ff6645a16b7f8352dcb57b699b1dcc 100644 (file)
@@ -1417,7 +1417,7 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
        struct cpl_tx_pkt *cpl;
 
 #ifdef NETIF_F_TSO
-       if (skb_shinfo(skb)->gso_size) {
+       if (skb_is_gso(skb)) {
                int eth_type;
                struct cpl_tx_pkt_lso *hdr;
 
index f77624f5f17bf33b0b23c3e2b6d31a25c795f0b2..1f34d06d01b004f96f5eddbdbb4035737a44ed9c 100644 (file)
@@ -2394,7 +2394,7 @@ e1000_tso(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
        uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
        int err;
 
-       if (skb_shinfo(skb)->gso_size) {
+       if (skb_is_gso(skb)) {
                if (skb_header_cloned(skb)) {
                        err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
                        if (err)
@@ -2519,7 +2519,7 @@ e1000_tx_map(struct e1000_adapter *adapter, struct e1000_tx_ring *tx_ring,
                 * tso gets written back prematurely before the data is fully
                 * DMA'd to the controller */
                if (!skb->data_len && tx_ring->last_tx_tso &&
-                   !skb_shinfo(skb)->gso_size) {
+                   !skb_is_gso(skb)) {
                        tx_ring->last_tx_tso = 0;
                        size -= 4;
                }
@@ -2806,8 +2806,7 @@ e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 
 #ifdef NETIF_F_TSO
        /* Controller Erratum workaround */
-       if (!skb->data_len && tx_ring->last_tx_tso &&
-           !skb_shinfo(skb)->gso_size)
+       if (!skb->data_len && tx_ring->last_tx_tso && !skb_is_gso(skb))
                count++;
 #endif
 
index 037d870712ff645510328bb2708e0926ff31d744..ad81ec68f8870cdeb96c23b8c1a2718dda7d3dfa 100644 (file)
@@ -1495,7 +1495,7 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
        np->tx_skbuff[nr] = skb;
 
 #ifdef NETIF_F_TSO
-       if (skb_shinfo(skb)->gso_size)
+       if (skb_is_gso(skb))
                tx_flags_extra = NV_TX2_TSO | (skb_shinfo(skb)->gso_size << NV_TX2_TSO_SHIFT);
        else
 #endif
index b91e082483f63067a976b207f39ff806eeeb2172..7eb08d929139de2b8ce901f687de87c350978783 100644 (file)
@@ -1173,7 +1173,7 @@ ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)
        uint16_t ipcse, tucse, mss;
        int err;
 
-       if(likely(skb_shinfo(skb)->gso_size)) {
+       if (likely(skb_is_gso(skb))) {
                if (skb_header_cloned(skb)) {
                        err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
                        if (err)
index 43fef7de8cb9b612789cdbbc2dae5300bc92196d..997cbce9af6e0b0fa9e203ac31da8816ccafb4f4 100644 (file)
@@ -139,7 +139,7 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
 #endif
 
 #ifdef LOOPBACK_TSO
-       if (skb_shinfo(skb)->gso_size) {
+       if (skb_is_gso(skb)) {
                BUG_ON(skb->protocol != htons(ETH_P_IP));
                BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP);
 
index f4c8fd373b9b3e5e1956d44d59391ce91e0ded72..ee1de971a71243993e7502a64cc49d73619ce384 100644 (file)
@@ -2116,7 +2116,7 @@ abort_linearize:
                }
                idx = (idx + 1) & tx->mask;
        } while (idx != last_idx);
-       if (skb_shinfo(skb)->gso_size) {
+       if (skb_is_gso(skb)) {
                printk(KERN_ERR
                       "myri10ge: %s: TSO but wanted to linearize?!?!?\n",
                       mgp->dev->name);
index 418f169a6a31e9f964964467b142e7691e7985ec..31093760aa1e9534270e2d5a9c8746ce3ce46b14 100644 (file)
@@ -1159,7 +1159,7 @@ static unsigned tx_le_req(const struct sk_buff *skb)
        count = sizeof(dma_addr_t) / sizeof(u32);
        count += skb_shinfo(skb)->nr_frags * count;
 
-       if (skb_shinfo(skb)->gso_size)
+       if (skb_is_gso(skb))
                ++count;
 
        if (skb->ip_summed == CHECKSUM_HW)
index 063816f2b11ecf8de32f779c2dfb7ac3b192afdd..4103c37172f9b154804f882ebf87be6ae3e26e29 100644 (file)
@@ -805,7 +805,7 @@ typhoon_start_tx(struct sk_buff *skb, struct net_device *dev)
         * If problems develop with TSO, check this first.
         */
        numDesc = skb_shinfo(skb)->nr_frags + 1;
-       if(skb_tso_size(skb))
+       if (skb_is_gso(skb))
                numDesc++;
 
        /* When checking for free space in the ring, we need to also
@@ -845,7 +845,7 @@ typhoon_start_tx(struct sk_buff *skb, struct net_device *dev)
                                TYPHOON_TX_PF_VLAN_TAG_SHIFT);
        }
 
-       if(skb_tso_size(skb)) {
+       if (skb_is_gso(skb)) {
                first_txd->processFlags |= TYPHOON_TX_PF_TCP_SEGMENT;
                first_txd->numDesc++;
 
index 8e8963f1573173a41fb8995dd3d9866605fdc714..329e12c1fae4a725bb7bc3bc2b76af2f3b064273 100644 (file)
@@ -4457,7 +4457,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
        queue = card->qdio.out_qs
                [qeth_get_priority_queue(card, skb, ipv, cast_type)];
 
-       if (skb_shinfo(skb)->gso_size)
+       if (skb_is_gso(skb))
                large_send = card->options.large_send;
 
        /*are we able to do TSO ? If so ,prepare and send it from here */
index 85f99f60deea46c3f5af0f24f9c3a806b51dfd7c..0359a6430018ed62b07d8a2cb6e5cc2876b32f9f 100644 (file)
@@ -1001,7 +1001,7 @@ static inline int net_gso_ok(int features, int gso_type)
 
 static inline int skb_gso_ok(struct sk_buff *skb, int features)
 {
-       return net_gso_ok(features, skb_shinfo(skb)->gso_size ?
+       return net_gso_ok(features, skb_is_gso(skb) ?
                                    skb_shinfo(skb)->gso_type : 0);
 }
 
index 3597b4f14389b2dbb4fef37552367266fad5d016..0bf31b83578caa0f4f8f66b9a3dfd5a292f49a3d 100644 (file)
@@ -1455,5 +1455,10 @@ static inline void skb_init_secmark(struct sk_buff *skb)
 { }
 #endif
 
+static inline int skb_is_gso(const struct sk_buff *skb)
+{
+       return skb_shinfo(skb)->gso_size;
+}
+
 #endif /* __KERNEL__ */
 #endif /* _LINUX_SKBUFF_H */
index 8be9f2123e54234f2c7ec1a1904d4e66abde715b..6ccd32b308091dcd443f6ff00ab0aea2ad456e21 100644 (file)
@@ -35,7 +35,7 @@ static inline unsigned packet_length(const struct sk_buff *skb)
 int br_dev_queue_push_xmit(struct sk_buff *skb)
 {
        /* drop mtu oversized packets except gso */
-       if (packet_length(skb) > skb->dev->mtu && !skb_shinfo(skb)->gso_size)
+       if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
                kfree_skb(skb);
        else {
 #ifdef CONFIG_BRIDGE_NETFILTER
index 8298a5179aef758d678f834d18239a7b004d7485..cbc8a389a0a8ceb4063661eb42239c0cfd4a0b52 100644 (file)
@@ -761,7 +761,7 @@ static int br_nf_dev_queue_xmit(struct sk_buff *skb)
 {
        if (skb->protocol == htons(ETH_P_IP) &&
            skb->len > skb->dev->mtu &&
-           !skb_shinfo(skb)->gso_size)
+           !skb_is_gso(skb))
                return ip_fragment(skb, br_dev_queue_push_xmit);
        else
                return br_dev_queue_push_xmit(skb);
index ca0e714613fb504bf495dad4eb20b2e2579aecc3..7c9f9a6421b8f3acdf7ccff1a106402913c75dd9 100644 (file)
@@ -209,7 +209,7 @@ static inline int ip_finish_output(struct sk_buff *skb)
                return dst_output(skb);
        }
 #endif
-       if (skb->len > dst_mtu(skb->dst) && !skb_shinfo(skb)->gso_size)
+       if (skb->len > dst_mtu(skb->dst) && !skb_is_gso(skb))
                return ip_fragment(skb, ip_finish_output2);
        else
                return ip_finish_output2(skb);
@@ -1095,7 +1095,7 @@ ssize_t   ip_append_page(struct sock *sk, struct page *page,
        while (size > 0) {
                int i;
 
-               if (skb_shinfo(skb)->gso_size)
+               if (skb_is_gso(skb))
                        len = size;
                else {
 
index 193363e22932ce19f84a60df94d8bfbdaac471d6..d16f863cf687645198a6299cab9b718c7c25af97 100644 (file)
@@ -134,7 +134,7 @@ static int xfrm4_output_finish(struct sk_buff *skb)
        }
 #endif
 
-       if (!skb_shinfo(skb)->gso_size)
+       if (!skb_is_gso(skb))
                return xfrm4_output_finish2(skb);
 
        skb->protocol = htons(ETH_P_IP);
index 2c5b44575af0fee96124d8e37580af9e2d2cb4b4..3bc74ce78800322cc70b88846a5970cca201a0cd 100644 (file)
@@ -147,7 +147,7 @@ static int ip6_output2(struct sk_buff *skb)
 
 int ip6_output(struct sk_buff *skb)
 {
-       if ((skb->len > dst_mtu(skb->dst) && !skb_shinfo(skb)->gso_size) ||
+       if ((skb->len > dst_mtu(skb->dst) && !skb_is_gso(skb)) ||
                                dst_allfrag(skb->dst))
                return ip6_fragment(skb, ip6_output2);
        else
@@ -229,7 +229,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
        skb->priority = sk->sk_priority;
 
        mtu = dst_mtu(dst);
-       if ((skb->len <= mtu) || ipfragok || skb_shinfo(skb)->gso_size) {
+       if ((skb->len <= mtu) || ipfragok || skb_is_gso(skb)) {
                IP6_INC_STATS(IPSTATS_MIB_OUTREQUESTS);
                return NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev,
                                dst_output);
index 48fccb1eca08ad31eae996995600924e1f491537..0eea60ea9ebc540c243a9b02861afd47cdf9ef74 100644 (file)
@@ -122,7 +122,7 @@ static int xfrm6_output_finish(struct sk_buff *skb)
 {
        struct sk_buff *segs;
 
-       if (!skb_shinfo(skb)->gso_size)
+       if (!skb_is_gso(skb))
                return xfrm6_output_finish2(skb);
 
        skb->protocol = htons(ETH_P_IP);