diff options
Diffstat (limited to 'include/linux/skbuff.h')
| -rw-r--r-- | include/linux/skbuff.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 6d58fa8a65fd..2ee5e63195c0 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -1434,10 +1434,12 @@ static inline void skb_zcopy_clear(struct sk_buff *skb, bool zerocopy) | |||
| 1434 | struct ubuf_info *uarg = skb_zcopy(skb); | 1434 | struct ubuf_info *uarg = skb_zcopy(skb); |
| 1435 | 1435 | ||
| 1436 | if (uarg) { | 1436 | if (uarg) { |
| 1437 | if (uarg->callback == sock_zerocopy_callback) { | 1437 | if (skb_zcopy_is_nouarg(skb)) { |
| 1438 | /* no notification callback */ | ||
| 1439 | } else if (uarg->callback == sock_zerocopy_callback) { | ||
| 1438 | uarg->zerocopy = uarg->zerocopy && zerocopy; | 1440 | uarg->zerocopy = uarg->zerocopy && zerocopy; |
| 1439 | sock_zerocopy_put(uarg); | 1441 | sock_zerocopy_put(uarg); |
| 1440 | } else if (!skb_zcopy_is_nouarg(skb)) { | 1442 | } else { |
| 1441 | uarg->callback(uarg, zerocopy); | 1443 | uarg->callback(uarg, zerocopy); |
| 1442 | } | 1444 | } |
| 1443 | 1445 | ||
| @@ -2691,7 +2693,8 @@ static inline int skb_orphan_frags(struct sk_buff *skb, gfp_t gfp_mask) | |||
| 2691 | { | 2693 | { |
| 2692 | if (likely(!skb_zcopy(skb))) | 2694 | if (likely(!skb_zcopy(skb))) |
| 2693 | return 0; | 2695 | return 0; |
| 2694 | if (skb_uarg(skb)->callback == sock_zerocopy_callback) | 2696 | if (!skb_zcopy_is_nouarg(skb) && |
| 2697 | skb_uarg(skb)->callback == sock_zerocopy_callback) | ||
| 2695 | return 0; | 2698 | return 0; |
| 2696 | return skb_copy_ubufs(skb, gfp_mask); | 2699 | return skb_copy_ubufs(skb, gfp_mask); |
| 2697 | } | 2700 | } |
