diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2012-11-01 09:16:22 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-02 21:29:57 -0400 |
commit | e19d6763cc300fcb706bd291b24ac06be71e1ce6 (patch) | |
tree | 05608ee69740360480b4c66a368eb21987993058 /net/core | |
parent | 202975b4c522c197e4e2269d389aafbf056a4c37 (diff) | |
download | kernel-common-e19d6763cc300fcb706bd291b24ac06be71e1ce6.tar.gz kernel-common-e19d6763cc300fcb706bd291b24ac06be71e1ce6.tar.bz2 kernel-common-e19d6763cc300fcb706bd291b24ac06be71e1ce6.zip |
skb: report completion status for zero copy skbs
Even if skb is marked for zero copy, net core might still decide
to copy it later which is somewhat slower than a copy in user context:
besides copying the data we need to pin/unpin the pages.
Add a parameter reporting such cases through zero copy callback:
if this happens a lot, device can take this into account
and switch to copying in user context.
This patch updates all users but ignores the passed value for now:
it will be used by follow-up patches.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/skbuff.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 6e04b1fa11f2..4abdf71a23f8 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -519,7 +519,7 @@ static void skb_release_data(struct sk_buff *skb) uarg = skb_shinfo(skb)->destructor_arg; if (uarg->callback) - uarg->callback(uarg); + uarg->callback(uarg, true); } if (skb_has_frag_list(skb)) @@ -797,7 +797,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) for (i = 0; i < num_frags; i++) skb_frag_unref(skb, i); - uarg->callback(uarg); + uarg->callback(uarg, false); /* skb frags point to kernel buffers */ for (i = num_frags - 1; i >= 0; i--) { |