From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH net 1/3] virtio-net: drop the rest of buffers when we can't allocate skb Date: Wed, 20 Nov 2013 15:27:29 +0200 Message-ID: <20131120132729.GB8455@redhat.com> References: <1384938447-3775-1-git-send-email-jasowang@redhat.com> <20131120103406.GF19341@redhat.com> <1146110853.27426099.1384949282266.JavaMail.root@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1146110853.27426099.1384949282266.JavaMail.root@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: Jason Wang 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 T24gV2VkLCBOb3YgMjAsIDIwMTMgYXQgMDc6MDg6MDJBTSAtMDUwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiAKPiAtLS0tLSDljp/lp4vpgq7ku7YgLS0tLS0KPiA+IE9uIFdlZCwgTm92IDIwLCAy MDEzIGF0IDA1OjA3OjI1UE0gKzA4MDAsIEphc29uIFdhbmcgd3JvdGU6Cj4gPiA+IFdoZW4gbWVy Z2VhYmxlIGJ1ZmZlciB3ZXJlIHVzZWQsIHdlIG9ubHkgcHV0IHRoZSBmaXJzdCBwYWdlIGJ1ZiBs ZWF2ZSB0aGUKPiA+ID4gcmVzdAo+ID4gPiBvZiBidWZmZXJzIGluIHRoZSB2aXJ0IHF1ZXVlLiBU aGlzIHdpbGwgY2F1c2UgdGhlIGRyaXZlciBjb3VsZCBub3QgZ2V0IHRoZQo+ID4gPiBjb3JyZWN0 IGhlYWQgYnVmZmVyIGFueSBtb3JlLiBGaXggdGhpcyBieSBkcm9wcGluZyB0aGUgcmVzdCBvZiBi dWZmZXJzIGZvcgo+ID4gPiB0aGlzCj4gPiA+IHBhY2tldC4KPiA+ID4gCj4gPiA+IFRoZSBidWcg d2FzIGludHJvZHVjZWQgYnkgY29tbWl0IDlhYjg2YmJjZjhiZTc1NTI1NmYwYTVlOTk0ZTBiMzhh ZjZiNGQzOTkKPiA+ID4gKHZpcnRpb19uZXQ6IERlZmVyIHNrYiBhbGxvY2F0aW9uIGluIHJlY2Vp dmUgcGF0aCkuCj4gPiA+IAo+ID4gPiBDYzogUnVzdHkgUnVzc2VsbCA8cnVzdHlAcnVzdGNvcnAu Y29tLmF1Pgo+ID4gPiBDYzogTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KPiA+ ID4gQ2M6IE1pY2hhZWwgRGFsdG9uIDxtd2RhbHRvbkBnb29nbGUuY29tPgo+ID4gPiBDYzogRXJp YyBEdW1hemV0IDxlZHVtYXpldEBnb29nbGUuY29tPgo+ID4gPiBDYzogU2hpcmxleSBNYSA8eG1h QHVzLmlibS5jb20+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IEphc29uIFdhbmcgPGphc293YW5nQHJl ZGhhdC5jb20+Cj4gPiA+IC0tLQo+ID4gPiBUaGlzIHBhdGNoIHdhcyBuZWVkZWQgZm9yIHN0YWJs ZQo+ID4gPiAtLS0KPiA+ID4gIGRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyB8IDE4ICsrKysrKysr KysrKysrKysrLQo+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0 LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ID4gaW5kZXggN2JhYjRkZS4uMjRmZDUw MiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCj4gPiA+ICsrKyBi L2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gPiBAQCAtMjIyLDYgKzIyMiwxNyBAQCBzdGF0 aWMgdm9pZCBza2JfeG1pdF9kb25lKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQo+ID4gPiAgCW5ldGlm X3dha2Vfc3VicXVldWUodmktPmRldiwgdnEydHhxKHZxKSk7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ ID4gK3N0YXRpYyB2b2lkIGRyb3BfbWVyZ2VhYmxlX2J1ZmZlcihzdHJ1Y3QgcmVjZWl2ZV9xdWV1 ZSAqcnEsIGludCBudW1fYnVmKQo+ID4gPiArewo+ID4gPiArCWNoYXIgKmJ1ZjsKPiA+ID4gKwlp bnQgbGVuOwo+ID4gPiArCj4gPiA+ICsJd2hpbGUgKC0tbnVtX2J1ZiAmJiAoYnVmID0gdmlydHF1 ZXVlX2dldF9idWYocnEtPnZxLCAmbGVuKSkgIT0gTlVMTCkgewo+ID4gPiArCQktLXJxLT5udW07 Cj4gPiA+ICsJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKGJ1ZikpOwo+ID4gPiArCX0KPiA+ ID4gK30KPiA+ID4gKwo+ID4gCj4gPiBUaGlzIGlzIHRoZSBzYW1lIGNvZGUgd2UgaGF2ZSBpbiBy ZWNlaXZlX21lcmdlYWJsZSBhbnl3YXkuCj4gPiBTbyBsZXQncyByZXVzZSB0aGF0Lgo+ID4gCj4g PiAKPiAKPiByZWNlaXZlX21lcmdlYWJsZSgpIHdhcyBjYWxsZWQgYWZ0ZXIgcGFnZV90b19za2Io KSB3YXMgY2FsbGVkIGFuZCAKPiB0aGVyZSdzIGxvdHMgb2YgY29uZGl0aW9ucyBjaGVjayB0aGVy ZS4gSSdtIG5vdCBzdXJlIGhvdyBjb3VsZCB3ZSAKPiByZXVzZSB0aGVtLgoKSSBwb3N0ZWQgYSBw YXRjaCBzaG93aW5nIGhvdyA6KQoKPiA+ID4gIC8qIENhbGxlZCBmcm9tIGJvdHRvbSBoYWxmIGNv bnRleHQgKi8KPiA+ID4gIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGFnZV90b19za2Ioc3RydWN0 IHJlY2VpdmVfcXVldWUgKnJxLAo+ID4gPiAgCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNp Z25lZCBpbnQgb2Zmc2V0LAo+ID4gPiBAQCAtMjM3LDggKzI0OCwxMyBAQCBzdGF0aWMgc3RydWN0 IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdAo+ID4gPiByZWNlaXZlX3F1ZXVlICpycSwKPiA+ ID4gIAo+ID4gPiAgCS8qIGNvcHkgc21hbGwgcGFja2V0IHNvIHdlIGNhbiByZXVzZSB0aGVzZSBw YWdlcyBmb3Igc21hbGwgZGF0YSAqLwo+ID4gPiAgCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBf YWxpZ24odmktPmRldiwgR09PRF9DT1BZX0xFTik7Cj4gPiA+IC0JaWYgKHVubGlrZWx5KCFza2Ip KQo+ID4gPiArCWlmICh1bmxpa2VseSghc2tiKSkgewo+ID4gPiArCQlpZiAodmktPm1lcmdlYWJs ZV9yeF9idWZzKSB7Cj4gPiA+ICsJCQloZHIgPSAoc3RydWN0IHNrYl92bmV0X2hkciAqKXA7Cj4g PiA+ICsJCQlkcm9wX21lcmdlYWJsZV9idWZmZXIocnEsIGhkci0+bWhkci5udW1fYnVmZmVycyk7 Cj4gPiA+ICsJCX0KPiA+ID4gIAkJcmV0dXJuIE5VTEw7Cj4gPiA+ICsJfQo+ID4gPiAgCj4gPiA+ ICAJaGRyID0gc2tiX3ZuZXRfaGRyKHNrYik7Cj4gPiA+ICAKPiA+ID4gLS0KPiA+ID4gMS44LjMu Mgo+ID4gLS0KPiA+IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5l ICJ1bnN1YnNjcmliZSBsaW51eC1rZXJuZWwiIGluCj4gPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2Ug dG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwo+ID4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAg aHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCj4gPiBQbGVhc2UgcmVh ZCB0aGUgRkFRIGF0ICBodHRwOi8vd3d3LnR1eC5vcmcvbGttbC8KPiA+IApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5n IGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9s aXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751859Ab3KTNYg (ORCPT ); Wed, 20 Nov 2013 08:24:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49271 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751558Ab3KTNYd (ORCPT ); Wed, 20 Nov 2013 08:24:33 -0500 Date: Wed, 20 Nov 2013 15:27:29 +0200 From: "Michael S. Tsirkin" To: Jason Wang 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 Subject: Re: [PATCH net 1/3] virtio-net: drop the rest of buffers when we can't allocate skb Message-ID: <20131120132729.GB8455@redhat.com> References: <1384938447-3775-1-git-send-email-jasowang@redhat.com> <20131120103406.GF19341@redhat.com> <1146110853.27426099.1384949282266.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1146110853.27426099.1384949282266.JavaMail.root@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 20, 2013 at 07:08:02AM -0500, Jason Wang wrote: > > > ----- 原始邮件 ----- > > 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. I posted a patch showing how :) > > > /* 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/ > >