diff options
| author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-07-08 13:34:32 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2006-07-08 13:34:32 -0700 | 
| commit | 89114afd435a486deb8583e89f490fc274444d18 (patch) | |
| tree | 800e784ba59755f9f3c9926a6992e1d0f5b8eec7 | |
| parent | 9c6c6795eda34e4dc38ecac912a16b6314082beb (diff) | |
| download | olio-linux-3.10-89114afd435a486deb8583e89f490fc274444d18.tar.xz olio-linux-3.10-89114afd435a486deb8583e89f490fc274444d18.zip  | |
[NET] gso: Add skb_is_gso
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>
| -rw-r--r-- | drivers/net/bnx2.c | 2 | ||||
| -rw-r--r-- | drivers/net/chelsio/sge.c | 2 | ||||
| -rw-r--r-- | drivers/net/e1000/e1000_main.c | 7 | ||||
| -rw-r--r-- | drivers/net/forcedeth.c | 2 | ||||
| -rw-r--r-- | drivers/net/ixgb/ixgb_main.c | 2 | ||||
| -rw-r--r-- | drivers/net/loopback.c | 2 | ||||
| -rw-r--r-- | drivers/net/myri10ge/myri10ge.c | 2 | ||||
| -rw-r--r-- | drivers/net/sky2.c | 2 | ||||
| -rw-r--r-- | drivers/net/typhoon.c | 4 | ||||
| -rw-r--r-- | drivers/s390/net/qeth_main.c | 2 | ||||
| -rw-r--r-- | include/linux/netdevice.h | 2 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 5 | ||||
| -rw-r--r-- | net/bridge/br_forward.c | 2 | ||||
| -rw-r--r-- | net/bridge/br_netfilter.c | 2 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 4 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_output.c | 2 | ||||
| -rw-r--r-- | net/ipv6/ip6_output.c | 4 | ||||
| -rw-r--r-- | net/ipv6/xfrm6_output.c | 2 | 
18 files changed, 27 insertions, 23 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index 64b6a72b4f6..db73de0d251 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c @@ -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 + diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c index 87f94d939ff..61b3754f50f 100644 --- a/drivers/net/chelsio/sge.c +++ b/drivers/net/chelsio/sge.c @@ -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; diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index f77624f5f17..1f34d06d01b 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -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 diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 037d870712f..ad81ec68f88 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -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 diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c index b91e082483f..7eb08d92913 100644 --- a/drivers/net/ixgb/ixgb_main.c +++ b/drivers/net/ixgb/ixgb_main.c @@ -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) diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 43fef7de8cb..997cbce9af6 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -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); diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index f4c8fd373b9..ee1de971a71 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c @@ -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); diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 418f169a6a3..31093760aa1 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -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) diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c index 063816f2b11..4103c37172f 100644 --- a/drivers/net/typhoon.c +++ b/drivers/net/typhoon.c @@ -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++; diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index 8e8963f1573..329e12c1fae 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c @@ -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 */ diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 85f99f60dee..0359a643001 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -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);  } diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 3597b4f1438..0bf31b83578 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -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 */ diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c index 8be9f2123e5..6ccd32b3080 100644 --- a/net/bridge/br_forward.c +++ b/net/bridge/br_forward.c @@ -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 diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index 8298a5179ae..cbc8a389a0a 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c @@ -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); diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index ca0e714613f..7c9f9a6421b 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -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 { diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c index 193363e2293..d16f863cf68 100644 --- a/net/ipv4/xfrm4_output.c +++ b/net/ipv4/xfrm4_output.c @@ -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); diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 2c5b44575af..3bc74ce7880 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -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); diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c index 48fccb1eca0..0eea60ea9eb 100644 --- a/net/ipv6/xfrm6_output.c +++ b/net/ipv6/xfrm6_output.c @@ -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);  |