From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH net 2/3] virtio-net: fix num calculation on frag skb allocation failure Date: Wed, 20 Nov 2013 07:08:50 -0500 (EST) Message-ID: <734327384.27426189.1384949330819.JavaMail.root@redhat.com> References: <1384938447-3775-1-git-send-email-jasowang@redhat.com> <1384938447-3775-2-git-send-email-jasowang@redhat.com> <20131120103729.GG19341@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20131120103729.GG19341@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 List-Id: virtualization@lists.linuxfoundation.org CgotLS0tLSDljp/lp4vpgq7ku7YgLS0tLS0KPiBPbiBXZWQsIE5vdiAyMCwgMjAxMyBhdCAwNTow NzoyNlBNICswODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+ID4gV2UgbmVlZCBkZWNyZWFzZSB0aGUg cnEtPm51bSBhZnRlciB3ZSBjYW4gZ2V0IGEgYnVmIHRocm91Z2gKPiA+IHZpcnRxdWV1ZV9nZXRf YnVmKCkgZXZlbiBpZiB3ZSBjb3VsZCBub3QgYWxsb2NhdGUgZnJhZyBza2IuIE90aGVyd2lzZSwg dGhlCj4gPiByZWZpbGwgcm91dGluZSB3b24ndCBiZSB0cmlnZ2VyZWQgdW5kZXIgaGVhdnkgbWVt b3J5IHN0cmVzcyBzaW5jZSB0aGUKPiA+IGRyaXZlciBtYXkKPiA+IHN0aWxsIHRoaW5rIHRoZXJl J3MgZW5vdWdoIHJvb20uCj4gPiAKPiA+IFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGJ5IGNvbW1p dCAyNjEzYWYwZWQxOGExMWQ1YzU2NmE4MWY5YTY1MTBiNzMxODA2NjBhCj4gPiAodmlydGlvX25l dDogbWlncmF0ZSBtZXJnZWFibGUgcnggYnVmZmVycyB0byBwYWdlIGZyYWcgYWxsb2NhdG9ycyku Cj4gPiAKPiA+IENjOiBSdXN0eSBSdXNzZWxsIDxydXN0eUBydXN0Y29ycC5jb20uYXU+Cj4gPiBD YzogTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KPiA+IENjOiBNaWNoYWVsIERh bHRvbiA8bXdkYWx0b25AZ29vZ2xlLmNvbT4KPiA+IENjOiBFcmljIER1bWF6ZXQgPGVkdW1hemV0 QGdvb2dsZS5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRo YXQuY29tPgo+IAo+IFNvIGxldCdzIHdyYXAgdmlydHF1ZXVlX2dldF9idWYgdG8gbWFrZSBzdXJl IHdlIGdldCBpdCByaWdodD8KPiAKCk9rLiBnb29kIGlkZWEuCj4gPiAtLS0KPiA+IFRoZSBwYXRj aCB3YXMgbmVlZGVkIGZvciAzLjEyIHN0YWJsZS4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvbmV0L3Zp cnRpb19uZXQuYyB8IDIgKy0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEg ZGVsZXRpb24oLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQu YyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gaW5kZXggMjRmZDUwMi4uZGUxZDZjYSAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gKysrIGIvZHJpdmVy cy9uZXQvdmlydGlvX25ldC5jCj4gPiBAQCAtMzMzLDYgKzMzMyw3IEBAIHN0YXRpYyBpbnQgcmVj ZWl2ZV9tZXJnZWFibGUoc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxLAo+ID4gc3RydWN0IHNrX2J1 ZmYgKmhlYWRfc2tiKQo+ID4gIAkJCWhlYWRfc2tiLT5kZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJv cnMrKzsKPiA+ICAJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICAJCX0KPiA+ICsJCS0tcnEtPm51bTsK PiA+ICAJCWlmICh1bmxpa2VseShsZW4gPiBNRVJHRV9CVUZGRVJfTEVOKSkgewo+ID4gIAkJCXBy X2RlYnVnKCIlczogcnggZXJyb3I6IG1lcmdlIGJ1ZmZlciB0b28gbG9uZ1xuIiwKPiA+ICAJCQkJ IGhlYWRfc2tiLT5kZXYtPm5hbWUpOwo+ID4gQEAgLTM2Nyw3ICszNjgsNiBAQCBzdGF0aWMgaW50 IHJlY2VpdmVfbWVyZ2VhYmxlKHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSwKPiA+IHN0cnVjdCBz a19idWZmICpoZWFkX3NrYikKPiA+ICAJCQlza2JfYWRkX3J4X2ZyYWcoY3Vycl9za2IsIG51bV9z a2JfZnJhZ3MsIHBhZ2UsCj4gPiAgCQkJCQlvZmZzZXQsIGxlbiwgTUVSR0VfQlVGRkVSX0xFTik7 Cj4gPiAgCQl9Cj4gPiAtCQktLXJxLT5udW07Cj4gPiAgCX0KPiA+ICAJcmV0dXJuIDA7Cj4gPiAg fQo+ID4gLS0KPiA+IDEuOC4zLjIKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9u QGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9u Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752914Ab3KTMIz (ORCPT ); Wed, 20 Nov 2013 07:08:55 -0500 Received: from mx3-phx2.redhat.com ([209.132.183.24]:46508 "EHLO mx3-phx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751390Ab3KTMIx convert rfc822-to-8bit (ORCPT ); Wed, 20 Nov 2013 07:08:53 -0500 Date: Wed, 20 Nov 2013 07:08:50 -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 Message-ID: <734327384.27426189.1384949330819.JavaMail.root@redhat.com> In-Reply-To: <20131120103729.GG19341@redhat.com> References: <1384938447-3775-1-git-send-email-jasowang@redhat.com> <1384938447-3775-2-git-send-email-jasowang@redhat.com> <20131120103729.GG19341@redhat.com> Subject: Re: [PATCH net 2/3] virtio-net: fix num calculation on frag skb allocation failure 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: fix num calculation on frag skb allocation failure Thread-Index: 1o76VnPAC/IrTF8D8j9rvTk81BbpHA== 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:26PM +0800, Jason Wang wrote: > > We need decrease the rq->num after we can get a buf through > > virtqueue_get_buf() even if we could not allocate frag skb. Otherwise, the > > refill routine won't be triggered under heavy memory stress since the > > driver may > > still think there's enough room. > > > > This bug was introduced by commit 2613af0ed18a11d5c566a81f9a6510b73180660a > > (virtio_net: migrate mergeable rx buffers to page frag allocators). > > > > Cc: Rusty Russell > > Cc: Michael S. Tsirkin > > Cc: Michael Dalton > > Cc: Eric Dumazet > > Signed-off-by: Jason Wang > > So let's wrap virtqueue_get_buf to make sure we get it right? > Ok. good idea. > > --- > > The patch was needed for 3.12 stable. > > --- > > drivers/net/virtio_net.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 24fd502..de1d6ca 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -333,6 +333,7 @@ static int receive_mergeable(struct receive_queue *rq, > > struct sk_buff *head_skb) > > head_skb->dev->stats.rx_length_errors++; > > return -EINVAL; > > } > > + --rq->num; > > if (unlikely(len > MERGE_BUFFER_LEN)) { > > pr_debug("%s: rx error: merge buffer too long\n", > > head_skb->dev->name); > > @@ -367,7 +368,6 @@ static int receive_mergeable(struct receive_queue *rq, > > struct sk_buff *head_skb) > > skb_add_rx_frag(curr_skb, num_skb_frags, page, > > offset, len, MERGE_BUFFER_LEN); > > } > > - --rq->num; > > } > > return 0; > > } > > -- > > 1.8.3.2 >