[ovs-dev] [rfc 2/6] ovs-datapath: Open vSwitch Datapath

Stephen Hemminger shemminger at vyatta.com
Wed Aug 25 04:53:54 UTC 2010


On Wed, 25 Aug 2010 13:08:03 +0900
Simon Horman <horms at verge.net.au> wrote:

> +static struct sk_buff *make_writable(struct sk_buff *skb, unsigned min_headroom, gfp_t gfp)
> +{
> +	if (skb_cloned(skb)) {
> +		struct sk_buff *nskb;
> +		unsigned headroom = max(min_headroom, skb_headroom(skb));
> +
> +		nskb = skb_copy_expand(skb, headroom, skb_tailroom(skb), gfp);
> +		if (nskb) {
> +			set_skb_csum_bits(skb, nskb);
> +			kfree_skb(skb);
> +			return nskb;
> +		}
> +	} else {
> +		unsigned int hdr_len = (skb_transport_offset(skb)
> +					+ sizeof(struct tcphdr));
> +		if (pskb_may_pull(skb, min(hdr_len, skb->len)))
> +			return skb;
> +	}
> +	kfree_skb(skb);
> +	return NULL;
> +}

1. Isn't the same as skb_cow_data()
2. If not why not make it generic
3. Do you need the gfp argument? Most of the skb rework routines just
   use GPF_ATOMIC

-- 




More information about the dev mailing list