Commit df5771ff authored by Michael S. Tsirkin's avatar Michael S. Tsirkin Committed by David S. Miller

skbuff: skb_segment: s/skb/head_skb/

rename local variable to make it easier to tell at a glance that we are
dealing with a head skb.
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4e1beba1
...@@ -2838,41 +2838,42 @@ EXPORT_SYMBOL_GPL(skb_pull_rcsum); ...@@ -2838,41 +2838,42 @@ EXPORT_SYMBOL_GPL(skb_pull_rcsum);
/** /**
* skb_segment - Perform protocol segmentation on skb. * skb_segment - Perform protocol segmentation on skb.
* @skb: buffer to segment * @head_skb: buffer to segment
* @features: features for the output path (see dev->features) * @features: features for the output path (see dev->features)
* *
* This function performs segmentation on the given skb. It returns * This function performs segmentation on the given skb. It returns
* a pointer to the first in a list of new skbs for the segments. * a pointer to the first in a list of new skbs for the segments.
* In case of error it returns ERR_PTR(err). * In case of error it returns ERR_PTR(err).
*/ */
struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) struct sk_buff *skb_segment(struct sk_buff *head_skb,
netdev_features_t features)
{ {
struct sk_buff *segs = NULL; struct sk_buff *segs = NULL;
struct sk_buff *tail = NULL; struct sk_buff *tail = NULL;
struct sk_buff *fskb = skb_shinfo(skb)->frag_list; struct sk_buff *fskb = skb_shinfo(head_skb)->frag_list;
skb_frag_t *frag = skb_shinfo(skb)->frags; skb_frag_t *frag = skb_shinfo(head_skb)->frags;
unsigned int mss = skb_shinfo(skb)->gso_size; unsigned int mss = skb_shinfo(head_skb)->gso_size;
unsigned int doffset = skb->data - skb_mac_header(skb); unsigned int doffset = head_skb->data - skb_mac_header(head_skb);
unsigned int offset = doffset; unsigned int offset = doffset;
unsigned int tnl_hlen = skb_tnl_header_len(skb); unsigned int tnl_hlen = skb_tnl_header_len(head_skb);
unsigned int headroom; unsigned int headroom;
unsigned int len; unsigned int len;
__be16 proto; __be16 proto;
bool csum; bool csum;
int sg = !!(features & NETIF_F_SG); int sg = !!(features & NETIF_F_SG);
int nfrags = skb_shinfo(skb)->nr_frags; int nfrags = skb_shinfo(head_skb)->nr_frags;
int err = -ENOMEM; int err = -ENOMEM;
int i = 0; int i = 0;
int pos; int pos;
proto = skb_network_protocol(skb); proto = skb_network_protocol(head_skb);
if (unlikely(!proto)) if (unlikely(!proto))
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
csum = !!can_checksum_protocol(features, proto); csum = !!can_checksum_protocol(features, proto);
__skb_push(skb, doffset); __skb_push(head_skb, doffset);
headroom = skb_headroom(skb); headroom = skb_headroom(head_skb);
pos = skb_headlen(skb); pos = skb_headlen(head_skb);
do { do {
struct sk_buff *nskb; struct sk_buff *nskb;
...@@ -2880,11 +2881,11 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) ...@@ -2880,11 +2881,11 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
int hsize; int hsize;
int size; int size;
len = skb->len - offset; len = head_skb->len - offset;
if (len > mss) if (len > mss)
len = mss; len = mss;
hsize = skb_headlen(skb) - offset; hsize = skb_headlen(head_skb) - offset;
if (hsize < 0) if (hsize < 0)
hsize = 0; hsize = 0;
if (hsize > len || !sg) if (hsize > len || !sg)
...@@ -2933,7 +2934,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) ...@@ -2933,7 +2934,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
__skb_push(nskb, doffset); __skb_push(nskb, doffset);
} else { } else {
nskb = __alloc_skb(hsize + doffset + headroom, nskb = __alloc_skb(hsize + doffset + headroom,
GFP_ATOMIC, skb_alloc_rx_flag(skb), GFP_ATOMIC, skb_alloc_rx_flag(head_skb),
NUMA_NO_NODE); NUMA_NO_NODE);
if (unlikely(!nskb)) if (unlikely(!nskb))
...@@ -2949,12 +2950,12 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) ...@@ -2949,12 +2950,12 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
segs = nskb; segs = nskb;
tail = nskb; tail = nskb;
__copy_skb_header(nskb, skb); __copy_skb_header(nskb, head_skb);
nskb->mac_len = skb->mac_len; nskb->mac_len = head_skb->mac_len;
skb_headers_offset_update(nskb, skb_headroom(nskb) - headroom); skb_headers_offset_update(nskb, skb_headroom(nskb) - headroom);
skb_copy_from_linear_data_offset(skb, -tnl_hlen, skb_copy_from_linear_data_offset(head_skb, -tnl_hlen,
nskb->data - tnl_hlen, nskb->data - tnl_hlen,
doffset + tnl_hlen); doffset + tnl_hlen);
...@@ -2963,7 +2964,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) ...@@ -2963,7 +2964,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
if (!sg) { if (!sg) {
nskb->ip_summed = CHECKSUM_NONE; nskb->ip_summed = CHECKSUM_NONE;
nskb->csum = skb_copy_and_csum_bits(skb, offset, nskb->csum = skb_copy_and_csum_bits(head_skb, offset,
skb_put(nskb, len), skb_put(nskb, len),
len, 0); len, 0);
continue; continue;
...@@ -2971,10 +2972,11 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) ...@@ -2971,10 +2972,11 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
nskb_frag = skb_shinfo(nskb)->frags; nskb_frag = skb_shinfo(nskb)->frags;
skb_copy_from_linear_data_offset(skb, offset, skb_copy_from_linear_data_offset(head_skb, offset,
skb_put(nskb, hsize), hsize); skb_put(nskb, hsize), hsize);
skb_shinfo(nskb)->tx_flags = skb_shinfo(skb)->tx_flags & SKBTX_SHARED_FRAG; skb_shinfo(nskb)->tx_flags = skb_shinfo(head_skb)->tx_flags &
SKBTX_SHARED_FRAG;
while (pos < offset + len) { while (pos < offset + len) {
if (i >= nfrags) { if (i >= nfrags) {
...@@ -3031,7 +3033,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features) ...@@ -3031,7 +3033,7 @@ struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features)
nskb->len - doffset, 0); nskb->len - doffset, 0);
nskb->ip_summed = CHECKSUM_NONE; nskb->ip_summed = CHECKSUM_NONE;
} }
} while ((offset += len) < skb->len); } while ((offset += len) < head_skb->len);
return segs; return segs;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment