From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH net 1/3] virtio-net: drop the rest of buffers when we can't allocate skb Date: Wed, 20 Nov 2013 07:08:02 -0500 (EST) Message-ID: <1146110853.27426099.1384949282266.JavaMail.root@redhat.com> References: <1384938447-3775-1-git-send-email-jasowang@redhat.com> <20131120103406.GF19341@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20131120103406.GF19341@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: "Michael S. Tsirkin" Cc: Michael Dalton , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, Eric Dumazet , Shirley Ma List-Id: virtualization@lists.linuxfoundation.org CgotLS0tLSDljp/lp4vpgq7ku7YgLS0tLS0KPiBPbiBXZWQsIE5vdiAyMCwgMjAxMyBhdCAwNTow NzoyNVBNICswODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+ID4gV2hlbiBtZXJnZWFibGUgYnVmZmVy IHdlcmUgdXNlZCwgd2Ugb25seSBwdXQgdGhlIGZpcnN0IHBhZ2UgYnVmIGxlYXZlIHRoZQo+ID4g cmVzdAo+ID4gb2YgYnVmZmVycyBpbiB0aGUgdmlydCBxdWV1ZS4gVGhpcyB3aWxsIGNhdXNlIHRo ZSBkcml2ZXIgY291bGQgbm90IGdldCB0aGUKPiA+IGNvcnJlY3QgaGVhZCBidWZmZXIgYW55IG1v cmUuIEZpeCB0aGlzIGJ5IGRyb3BwaW5nIHRoZSByZXN0IG9mIGJ1ZmZlcnMgZm9yCj4gPiB0aGlz Cj4gPiBwYWNrZXQuCj4gPiAKPiA+IFRoZSBidWcgd2FzIGludHJvZHVjZWQgYnkgY29tbWl0IDlh Yjg2YmJjZjhiZTc1NTI1NmYwYTVlOTk0ZTBiMzhhZjZiNGQzOTkKPiA+ICh2aXJ0aW9fbmV0OiBE ZWZlciBza2IgYWxsb2NhdGlvbiBpbiByZWNlaXZlIHBhdGgpLgo+ID4gCj4gPiBDYzogUnVzdHkg UnVzc2VsbCA8cnVzdHlAcnVzdGNvcnAuY29tLmF1Pgo+ID4gQ2M6IE1pY2hhZWwgUy4gVHNpcmtp biA8bXN0QHJlZGhhdC5jb20+Cj4gPiBDYzogTWljaGFlbCBEYWx0b24gPG13ZGFsdG9uQGdvb2ds ZS5jb20+Cj4gPiBDYzogRXJpYyBEdW1hemV0IDxlZHVtYXpldEBnb29nbGUuY29tPgo+ID4gQ2M6 IFNoaXJsZXkgTWEgPHhtYUB1cy5pYm0uY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogSmFzb24gV2Fu ZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KPiA+IC0tLQo+ID4gVGhpcyBwYXRjaCB3YXMgbmVlZGVk IGZvciBzdGFibGUKPiA+IC0tLQo+ID4gIGRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyB8IDE4ICsr KysrKysrKysrKysrKysrLQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0 LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+IGluZGV4IDdiYWI0ZGUuLjI0ZmQ1MDIg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ICsrKyBiL2RyaXZl cnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gQEAgLTIyMiw2ICsyMjIsMTcgQEAgc3RhdGljIHZvaWQg c2tiX3htaXRfZG9uZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSkKPiA+ICAJbmV0aWZfd2FrZV9zdWJx dWV1ZSh2aS0+ZGV2LCB2cTJ0eHEodnEpKTsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIHZvaWQg ZHJvcF9tZXJnZWFibGVfYnVmZmVyKHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSwgaW50IG51bV9i dWYpCj4gPiArewo+ID4gKwljaGFyICpidWY7Cj4gPiArCWludCBsZW47Cj4gPiArCj4gPiArCXdo aWxlICgtLW51bV9idWYgJiYgKGJ1ZiA9IHZpcnRxdWV1ZV9nZXRfYnVmKHJxLT52cSwgJmxlbikp ICE9IE5VTEwpIHsKPiA+ICsJCS0tcnEtPm51bTsKPiA+ICsJCXB1dF9wYWdlKHZpcnRfdG9faGVh ZF9wYWdlKGJ1ZikpOwo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+IAo+IFRoaXMgaXMgdGhlIHNhbWUg Y29kZSB3ZSBoYXZlIGluIHJlY2VpdmVfbWVyZ2VhYmxlIGFueXdheS4KPiBTbyBsZXQncyByZXVz ZSB0aGF0Lgo+IAo+IAoKcmVjZWl2ZV9tZXJnZWFibGUoKSB3YXMgY2FsbGVkIGFmdGVyIHBhZ2Vf dG9fc2tiKCkgd2FzIGNhbGxlZCBhbmQgCnRoZXJlJ3MgbG90cyBvZiBjb25kaXRpb25zIGNoZWNr IHRoZXJlLiBJJ20gbm90IHN1cmUgaG93IGNvdWxkIHdlIApyZXVzZSB0aGVtLgo+ID4gIC8qIENh bGxlZCBmcm9tIGJvdHRvbSBoYWxmIGNvbnRleHQgKi8KPiA+ICBzdGF0aWMgc3RydWN0IHNrX2J1 ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSwKPiA+ICAJCQkJICAgc3Ry dWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvZmZzZXQsCj4gPiBAQCAtMjM3LDggKzI0OCwx MyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdAo+ID4gcmVjZWl2 ZV9xdWV1ZSAqcnEsCj4gPiAgCj4gPiAgCS8qIGNvcHkgc21hbGwgcGFja2V0IHNvIHdlIGNhbiBy ZXVzZSB0aGVzZSBwYWdlcyBmb3Igc21hbGwgZGF0YSAqLwo+ID4gIAlza2IgPSBuZXRkZXZfYWxs b2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIEdPT0RfQ09QWV9MRU4pOwo+ID4gLQlpZiAodW5saWtl bHkoIXNrYikpCj4gPiArCWlmICh1bmxpa2VseSghc2tiKSkgewo+ID4gKwkJaWYgKHZpLT5tZXJn ZWFibGVfcnhfYnVmcykgewo+ID4gKwkJCWhkciA9IChzdHJ1Y3Qgc2tiX3ZuZXRfaGRyICopcDsK PiA+ICsJCQlkcm9wX21lcmdlYWJsZV9idWZmZXIocnEsIGhkci0+bWhkci5udW1fYnVmZmVycyk7 Cj4gPiArCQl9Cj4gPiAgCQlyZXR1cm4gTlVMTDsKPiA+ICsJfQo+ID4gIAo+ID4gIAloZHIgPSBz a2Jfdm5ldF9oZHIoc2tiKTsKPiA+ICAKPiA+IC0tCj4gPiAxLjguMy4yCj4gLS0KPiBUbyB1bnN1 YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgt a2VybmVsIiBpbgo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJu ZWwub3JnCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9t YWpvcmRvbW8taW5mby5odG1sCj4gUGxlYXNlIHJlYWQgdGhlIEZBUSBhdCAgaHR0cDovL3d3dy50 dXgub3JnL2xrbWwvCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5s aW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFp bG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752490Ab3KTMIP (ORCPT ); Wed, 20 Nov 2013 07:08:15 -0500 Received: from mx3-phx2.redhat.com ([209.132.183.24]:46478 "EHLO mx3-phx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751353Ab3KTMIL convert rfc822-to-8bit (ORCPT ); Wed, 20 Nov 2013 07:08:11 -0500 Date: Wed, 20 Nov 2013 07:08:02 -0500 (EST) From: Jason Wang To: "Michael S. Tsirkin" Cc: rusty@rustcorp.com.au, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Michael Dalton , Eric Dumazet , Shirley Ma Message-ID: <1146110853.27426099.1384949282266.JavaMail.root@redhat.com> In-Reply-To: <20131120103406.GF19341@redhat.com> References: <1384938447-3775-1-git-send-email-jasowang@redhat.com> <20131120103406.GF19341@redhat.com> Subject: Re: [PATCH net 1/3] virtio-net: drop the rest of buffers when we can't allocate skb MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT X-Originating-IP: [10.5.82.11] X-Mailer: Zimbra 8.0.3_GA_5664 (ZimbraWebClient - GC31 (Win)/8.0.3_GA_5664) Thread-Topic: virtio-net: drop the rest of buffers when we can't allocate skb Thread-Index: qC0O4keX0EJuvRkjESBO9EX9f3Wrjw== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- 原始邮件 ----- > On Wed, Nov 20, 2013 at 05:07:25PM +0800, Jason Wang wrote: > > When mergeable buffer were used, we only put the first page buf leave the > > rest > > of buffers in the virt queue. This will cause the driver could not get the > > correct head buffer any more. Fix this by dropping the rest of buffers for > > this > > packet. > > > > The bug was introduced by commit 9ab86bbcf8be755256f0a5e994e0b38af6b4d399 > > (virtio_net: Defer skb allocation in receive path). > > > > Cc: Rusty Russell > > Cc: Michael S. Tsirkin > > Cc: Michael Dalton > > Cc: Eric Dumazet > > Cc: Shirley Ma > > Signed-off-by: Jason Wang > > --- > > This patch was needed for stable > > --- > > drivers/net/virtio_net.c | 18 +++++++++++++++++- > > 1 file changed, 17 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 7bab4de..24fd502 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -222,6 +222,17 @@ static void skb_xmit_done(struct virtqueue *vq) > > netif_wake_subqueue(vi->dev, vq2txq(vq)); > > } > > > > +static void drop_mergeable_buffer(struct receive_queue *rq, int num_buf) > > +{ > > + char *buf; > > + int len; > > + > > + while (--num_buf && (buf = virtqueue_get_buf(rq->vq, &len)) != NULL) { > > + --rq->num; > > + put_page(virt_to_head_page(buf)); > > + } > > +} > > + > > This is the same code we have in receive_mergeable anyway. > So let's reuse that. > > receive_mergeable() was called after page_to_skb() was called and there's lots of conditions check there. I'm not sure how could we reuse them. > > /* Called from bottom half context */ > > static struct sk_buff *page_to_skb(struct receive_queue *rq, > > struct page *page, unsigned int offset, > > @@ -237,8 +248,13 @@ static struct sk_buff *page_to_skb(struct > > receive_queue *rq, > > > > /* copy small packet so we can reuse these pages for small data */ > > skb = netdev_alloc_skb_ip_align(vi->dev, GOOD_COPY_LEN); > > - if (unlikely(!skb)) > > + if (unlikely(!skb)) { > > + if (vi->mergeable_rx_bufs) { > > + hdr = (struct skb_vnet_hdr *)p; > > + drop_mergeable_buffer(rq, hdr->mhdr.num_buffers); > > + } > > return NULL; > > + } > > > > hdr = skb_vnet_hdr(skb); > > > > -- > > 1.8.3.2 > -- > 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/ >