aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/skbuff.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r--include/linux/skbuff.h9
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}