Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/811473/?format=api
{ "id": 811473, "url": "http://patchwork.ozlabs.org/api/patches/811473/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1504865697-27274-2-git-send-email-liuhangbin@gmail.com/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1504865697-27274-2-git-send-email-liuhangbin@gmail.com>", "list_archive_url": null, "date": "2017-09-08T10:14:56", "name": "[iproute2,1/2] lib/libnetlink: re malloc buff if size is not enough", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "b2d5892ac2bdebc77d956be50de428c541e504a8", "submitter": { "id": 15639, "url": "http://patchwork.ozlabs.org/api/people/15639/?format=api", "name": "Hangbin Liu", "email": "liuhangbin@gmail.com" }, "delegate": { "id": 389, "url": "http://patchwork.ozlabs.org/api/users/389/?format=api", "username": "shemminger", "first_name": "stephen", "last_name": "hemminger", "email": "shemminger@vyatta.com" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1504865697-27274-2-git-send-email-liuhangbin@gmail.com/mbox/", "series": [ { "id": 2171, "url": "http://patchwork.ozlabs.org/api/series/2171/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=2171", "date": "2017-09-08T10:14:55", "name": "malloc correct buff at run time", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/2171/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/811473/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/811473/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"cU0WvBPe\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpY9m6Q1Jz9s3T\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 8 Sep 2017 20:15:40 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1754523AbdIHKPi (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tFri, 8 Sep 2017 06:15:38 -0400", "from mail-pg0-f68.google.com ([74.125.83.68]:36824 \"EHLO\n\tmail-pg0-f68.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1752372AbdIHKPf (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Fri, 8 Sep 2017 06:15:35 -0400", "by mail-pg0-f68.google.com with SMTP id d8so1126807pgt.3\n\tfor <netdev@vger.kernel.org>; Fri, 08 Sep 2017 03:15:35 -0700 (PDT)", "from leo.usersys.redhat.com ([209.132.188.80])\n\tby smtp.gmail.com with ESMTPSA id\n\ti2sm3325822pfd.21.2017.09.08.03.15.32\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tFri, 08 Sep 2017 03:15:34 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=c1u8smMcBM9njXyYbCAonO05NF+aExRWasBiElOZs8Q=;\n\tb=cU0WvBPez8E8hEDeI2vS/EzHhfipBL1HEWlc9uCTERiAp7KhR+SFIudUl/vIyYq1Ib\n\t21HPkm8tYnH8UpcSn7D5EmtM5e77PXSdIXWUyrnMCLpRRJRkOHsbNTDgL29M3POVQfdF\n\tzuwrz1UGlDhFP8LMZvcapAdVMyn+8+5Q1T2zsiORT6y3djYcXvp4BFmnsoS6xX8UzV1X\n\tnpNCWJuZZeDtskwR4aqBq2W7tjMZAqhning91Iri1NvxAWg2aLtBRmeMtX2OtAEQKsob\n\tswjj/TQaOh9tAriSRcloetjNDfWpbdB4igpc72S6i1LZuApijxAYKyYOT29nCP1MhBKh\n\tWpTg==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=c1u8smMcBM9njXyYbCAonO05NF+aExRWasBiElOZs8Q=;\n\tb=kuUhC7vm7gVAS574RIliLlhfn6YZgwfuNvxu+Crc2YWri4TaicTPu9RxQzaZ4NUlfi\n\txiufeAcRltasufE78UXMJza90RyxjrPkhY7j4QqV6TkTlKxkY1Vsl7vg4qX8vuCsjxCL\n\tSeeLb6qwg8Lvf34ioV5VEVooFmEvHjPQwpcptVAdSWpd6N7PKt4JjAIv7ZVhBvP2iYRd\n\tWfj5flXePqAj4A7jBWfyM+JhFfAbQmpxuqIiPmQvtBeAge8usya00TWj/lWiSGezPk/p\n\t4rQoGBK2I7eWX1rlNvAbkrQX/i/57/VuPmYAFSXU76nGOW829iTVIeMWC2DFOBRmS4r3\n\tMlew==", "X-Gm-Message-State": "AHPjjUhJMu/X1Rqo9355hPa+OtjFdooxNsjuIT+Hq8s5dmarMVKFHP6/\n\tjl+42ehFUpOiWahw", "X-Google-Smtp-Source": "ADKCNb75N8t8J4/sfrRhH/CoCXnK5NBf/EQhx9ZOFdZINTs+TrVPMyTv2hoLOnQ1CKfxpiwZ/Y00mg==", "X-Received": "by 10.98.7.78 with SMTP id b75mr2563445pfd.19.1504865734431;\n\tFri, 08 Sep 2017 03:15:34 -0700 (PDT)", "From": "Hangbin Liu <liuhangbin@gmail.com>", "To": "netdev@vger.kernel.org", "Cc": "Stephen Hemminger <stephen@networkplumber.org>,\n\tMichal Kubecek <mkubecek@suse.cz>, Phil Sutter <phil@nwl.cc>,\n\tHangbin Liu <liuhangbin@gmail.com>", "Subject": "[PATCH iproute2 1/2] lib/libnetlink: re malloc buff if size is not\n\tenough", "Date": "Fri, 8 Sep 2017 18:14:56 +0800", "Message-Id": "<1504865697-27274-2-git-send-email-liuhangbin@gmail.com>", "X-Mailer": "git-send-email 2.5.5", "In-Reply-To": "<1504865697-27274-1-git-send-email-liuhangbin@gmail.com>", "References": "<1504865697-27274-1-git-send-email-liuhangbin@gmail.com>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "With commit 72b365e8e0fd (\"libnetlink: Double the dump buffer size\")\nwe doubled the buffer size to support more VFs. But the VFs number is\nincreasing all the time. Some customers even use more than 200 VFs now.\n\nWe could not double it everytime when the buffer is not enough. Let's just\nnot hard code the buffer size and malloc the correct number when running.\n\nIntroduce a new function rtnl_recvmsg() to get correct buffer.\n\nSigned-off-by: Hangbin Liu <liuhangbin@gmail.com>\n---\n lib/libnetlink.c | 98 ++++++++++++++++++++++++++++++++++++++------------------\n 1 file changed, 66 insertions(+), 32 deletions(-)", "diff": "diff --git a/lib/libnetlink.c b/lib/libnetlink.c\nindex be7ac86..37cfb5a 100644\n--- a/lib/libnetlink.c\n+++ b/lib/libnetlink.c\n@@ -402,6 +402,59 @@ static void rtnl_dump_error(const struct rtnl_handle *rth,\n \t}\n }\n \n+static int rtnl_recvmsg(int fd, struct msghdr *msg, char **buf)\n+{\n+\tstruct iovec *iov;\n+\tint len = -1, buf_len = 32768;\n+\tchar *buffer = *buf;\n+\n+\tint flag = MSG_PEEK | MSG_TRUNC;\n+\n+\tif (buffer == NULL)\n+re_malloc:\n+\t\tbuffer = malloc(buf_len);\n+\n+\tif (buffer == NULL) {\n+\t\tfprintf(stderr, \"malloc error: no enough buffer\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tiov = msg->msg_iov;\n+\tiov->iov_base = buffer;\n+\tiov->iov_len = buf_len;\n+\n+re_recv:\n+\tlen = recvmsg(fd, msg, flag);\n+\n+\tif (len < 0) {\n+\t\tif (errno == EINTR || errno == EAGAIN)\n+\t\t\treturn 0;\n+\t\tfprintf(stderr, \"netlink receive error %s (%d)\\n\",\n+\t\t\tstrerror(errno), errno);\n+\t\treturn len;\n+\t}\n+\n+\tif (len == 0) {\n+\t\tfprintf(stderr, \"EOF on netlink\\n\");\n+\t\treturn -1;\n+\t}\n+\n+\tif (len > buf_len) {\n+\t\tfree(buffer);\n+\t\tbuf_len = len;\n+\t\tflag = 0;\n+\t\tgoto re_malloc;\n+\t}\n+\n+\tif (flag != 0) {\n+\t\tflag = 0;\n+\t\tgoto re_recv;\n+\t}\n+\n+\t*buf = buffer;\n+\treturn len;\n+}\n+\n int rtnl_dump_filter_l(struct rtnl_handle *rth,\n \t\t const struct rtnl_dump_filter_arg *arg)\n {\n@@ -413,31 +466,20 @@ int rtnl_dump_filter_l(struct rtnl_handle *rth,\n \t\t.msg_iov = &iov,\n \t\t.msg_iovlen = 1,\n \t};\n-\tchar buf[32768];\n+\tstatic char *buf = NULL;\n \tint dump_intr = 0;\n \n-\tiov.iov_base = buf;\n \twhile (1) {\n \t\tint status;\n \t\tconst struct rtnl_dump_filter_arg *a;\n \t\tint found_done = 0;\n \t\tint msglen = 0;\n \n-\t\tiov.iov_len = sizeof(buf);\n-\t\tstatus = recvmsg(rth->fd, &msg, 0);\n-\n-\t\tif (status < 0) {\n-\t\t\tif (errno == EINTR || errno == EAGAIN)\n-\t\t\t\tcontinue;\n-\t\t\tfprintf(stderr, \"netlink receive error %s (%d)\\n\",\n-\t\t\t\tstrerror(errno), errno);\n-\t\t\treturn -1;\n-\t\t}\n-\n-\t\tif (status == 0) {\n-\t\t\tfprintf(stderr, \"EOF on netlink\\n\");\n-\t\t\treturn -1;\n-\t\t}\n+\t\tstatus = rtnl_recvmsg(rth->fd, &msg, &buf);\n+\t\tif (status < 0)\n+\t\t\treturn status;\n+\t\telse if (status == 0)\n+\t\t\tcontinue;\n \n \t\tif (rth->dump_fp)\n \t\t\tfwrite(buf, 1, NLMSG_ALIGN(status), rth->dump_fp);\n@@ -543,7 +585,7 @@ static int __rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n \t\t.msg_iov = &iov,\n \t\t.msg_iovlen = 1,\n \t};\n-\tchar buf[32768] = {};\n+\tstatic char *buf = NULL;\n \n \tn->nlmsg_seq = seq = ++rtnl->seq;\n \n@@ -556,22 +598,14 @@ static int __rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n,\n \t\treturn -1;\n \t}\n \n-\tiov.iov_base = buf;\n \twhile (1) {\n-\t\tiov.iov_len = sizeof(buf);\n-\t\tstatus = recvmsg(rtnl->fd, &msg, 0);\n+\t\tstatus = rtnl_recvmsg(rtnl->fd, &msg, &buf);\n+\n+\t\tif (status < 0)\n+\t\t\treturn status;\n+\t\telse if (status == 0)\n+\t\t\tcontinue;\n \n-\t\tif (status < 0) {\n-\t\t\tif (errno == EINTR || errno == EAGAIN)\n-\t\t\t\tcontinue;\n-\t\t\tfprintf(stderr, \"netlink receive error %s (%d)\\n\",\n-\t\t\t\tstrerror(errno), errno);\n-\t\t\treturn -1;\n-\t\t}\n-\t\tif (status == 0) {\n-\t\t\tfprintf(stderr, \"EOF on netlink\\n\");\n-\t\t\treturn -1;\n-\t\t}\n \t\tif (msg.msg_namelen != sizeof(nladdr)) {\n \t\t\tfprintf(stderr,\n \t\t\t\t\"sender address length == %d\\n\",\n", "prefixes": [ "iproute2", "1/2" ] }