Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70008aa5 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin Committed by David S. Miller
Browse files

skbuff: convert to skb_orphan_frags



Reduce code duplication a bit using the new helper.

Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a353e0ce
Loading
Loading
Loading
Loading
+8 −14
Original line number Original line Diff line number Diff line
@@ -804,10 +804,8 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
{
{
	struct sk_buff *n;
	struct sk_buff *n;


	if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
	if (skb_orphan_frags(skb, gfp_mask))
		if (skb_copy_ubufs(skb, gfp_mask))
		return NULL;
		return NULL;
	}


	n = skb + 1;
	n = skb + 1;
	if (skb->fclone == SKB_FCLONE_ORIG &&
	if (skb->fclone == SKB_FCLONE_ORIG &&
@@ -927,13 +925,11 @@ struct sk_buff *__pskb_copy(struct sk_buff *skb, int headroom, gfp_t gfp_mask)
	if (skb_shinfo(skb)->nr_frags) {
	if (skb_shinfo(skb)->nr_frags) {
		int i;
		int i;


		if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
		if (skb_orphan_frags(skb, gfp_mask)) {
			if (skb_copy_ubufs(skb, gfp_mask)) {
			kfree_skb(n);
			kfree_skb(n);
			n = NULL;
			n = NULL;
			goto out;
			goto out;
		}
		}
		}
		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
			skb_shinfo(n)->frags[i] = skb_shinfo(skb)->frags[i];
			skb_shinfo(n)->frags[i] = skb_shinfo(skb)->frags[i];
			skb_frag_ref(skb, i);
			skb_frag_ref(skb, i);
@@ -1005,10 +1001,8 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
	 */
	 */
	if (skb_cloned(skb)) {
	if (skb_cloned(skb)) {
		/* copy this zero copy skb frags */
		/* copy this zero copy skb frags */
		if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
		if (skb_orphan_frags(skb, gfp_mask))
			if (skb_copy_ubufs(skb, gfp_mask))
			goto nofrags;
			goto nofrags;
		}
		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
			skb_frag_ref(skb, i);
			skb_frag_ref(skb, i);