Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933801Ab2J3Po0 (ORCPT ); Tue, 30 Oct 2012 11:44:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59544 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753228Ab2J3PoY (ORCPT ); Tue, 30 Oct 2012 11:44:24 -0400 Message-ID: <508FF5D0.6080107@redhat.com> Date: Tue, 30 Oct 2012 11:44:16 -0400 From: Vlad Yasevich Reply-To: vyasevic@redhat.com Organization: Red Hat User-Agent: Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20120911 Thunderbird/15.0.1 MIME-Version: 1.0 To: "Michael S. Tsirkin" CC: "David S. Miller" , Eric Dumazet , Andrew Morton , Alexander Duyck , Ian Campbell , kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH net-next 2/8] skb: api to report errors for zero copy skbs References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2263 Lines: 69 On 10/29/2012 11:49 AM, Michael S. Tsirkin wrote: > Orphaning frags for zero copy skbs needs to allocate data in atomic > context so is has a chance to fail. If it does we currently discard > the skb which is safe, but we don't report anything to the caller, > so it can not recover by e.g. disabling zero copy. > > Add an API to free skb reporting such errors: this is used > by tun in case orphaning frags fails. > > Signed-off-by: Michael S. Tsirkin > --- > include/linux/skbuff.h | 1 + > net/core/skbuff.c | 19 +++++++++++++++++++ > 2 files changed, 20 insertions(+) > > diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h > index 8bac11b..0644432 100644 > --- a/include/linux/skbuff.h > +++ b/include/linux/skbuff.h > @@ -568,6 +568,7 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb) > } > > extern void kfree_skb(struct sk_buff *skb); > +extern void skb_tx_error(struct sk_buff *skb, int err); > extern void consume_skb(struct sk_buff *skb); > extern void __kfree_skb(struct sk_buff *skb); > extern struct kmem_cache *skbuff_head_cache; > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index eb31f6e..ad99c64 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -635,6 +635,25 @@ void kfree_skb(struct sk_buff *skb) > EXPORT_SYMBOL(kfree_skb); > > /** > + * kfree_skb_on_error - report an sk_buff xmit error > + * @skb: buffer that triggered an error > + * > + * Report xmit error if a device callback is tracking this skb. > + */ Nit: Comment doesn't match new function. -vlad > +void skb_tx_error(struct sk_buff *skb, int err) > +{ > + if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { > + struct ubuf_info *uarg; > + > + uarg = skb_shinfo(skb)->destructor_arg; > + if (uarg->callback) > + uarg->callback(uarg, err); > + skb_shinfo(skb)->tx_flags &= ~SKBTX_DEV_ZEROCOPY; > + } > +} > +EXPORT_SYMBOL(skb_tx_error); > + > +/** > * consume_skb - free an skbuff > * @skb: buffer to free > * > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/