busybox: backport the ifplugd-larger-buffer patch for kernel 3.9 and above

To use the busybox-ipflugd a larger buffer for netdev messages
is needed. This is orginal patch from

http://git.busybox.net/busybox/commit/networking/ifplugd.c?id=da331d779c19d7d5d4ef05152ee467d617913a01

which is needed until a new busybox version is released.

This commit only is only relevant to the dora release of poky.

* bump PRINC
This commit is contained in:
Henning Heinold 2013-12-11 19:51:31 +01:00 committed by Holger Hans Peter Freyther
parent 2ce4302917
commit 6d12c623fc
3 changed files with 65 additions and 1 deletions

View File

@ -0,0 +1,62 @@
Upstream-Status: Backport
Signed-off-by: Henning Heinold <henning@itconsulting-heinold.de>
From da331d779c19d7d5d4ef05152ee467d617913a01 Mon Sep 17 00:00:00 2001
From: Tito Ragusa <farmatito@tiscali.it>
Date: Sun, 4 Aug 2013 18:08:40 +0200
Subject: [PATCH 001/104] ifplugd: use a larger netlink buffer
function old new delta
check_existence_through_netlink 310 321 +11
Signed-off-by: Tito Ragusa <farmatito@tiscali.it>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
networking/ifplugd.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 3cdc2c9..b578f4c 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -451,20 +451,24 @@ static smallint detect_link(void)
static NOINLINE int check_existence_through_netlink(void)
{
int iface_len;
- char replybuf[1024];
+ /* Buffer was 1K, but on linux-3.9.9 it was reported to be too small.
+ * netlink.h: "limit to 8K to avoid MSG_TRUNC when PAGE_SIZE is very large".
+ * Note: on error returns (-1) we exit, no need to free replybuf.
+ */
+ enum { BUF_SIZE = 8 * 1024 };
+ char *replybuf = xmalloc(BUF_SIZE);
iface_len = strlen(G.iface);
while (1) {
struct nlmsghdr *mhdr;
ssize_t bytes;
- bytes = recv(netlink_fd, &replybuf, sizeof(replybuf), MSG_DONTWAIT);
+ bytes = recv(netlink_fd, replybuf, BUF_SIZE, MSG_DONTWAIT);
if (bytes < 0) {
if (errno == EAGAIN)
- return G.iface_exists;
+ goto ret;
if (errno == EINTR)
continue;
-
bb_perror_msg("netlink: recv");
return -1;
}
@@ -507,6 +511,8 @@ static NOINLINE int check_existence_through_netlink(void)
}
}
+ ret:
+ free(replybuf);
return G.iface_exists;
}
--
1.7.10.4

View File

@ -1,6 +1,6 @@
SYSMOCOM := "${@os.path.dirname(bb.data.getVar('FILE', d, True))}"
FILESEXTRAPATHS_prepend := "${SYSMOCOM}/busybox-${SYSMOCOM_ORIG_PV}:${SYSMOCOM}/files:"
PRINC = "19"
PRINC = "20"
SRC_URI += "file://busybox-ifplugd.sh \
file://ifplugd.sh"

View File

@ -2,3 +2,5 @@
SYSMOCOM_D := "${@os.path.dirname(bb.data.getVar('FILE', d, True))}"
FILESEXTRAPATHS_prepend := "${SYSMOCOM}/${PN}-systemd:${SYSMOCOM_D}/${PN}:"
PRINC := "${@int(PRINC) + 2}"
SRC_URI += "file://ifplugd-use-a-larger-netlink-buffer.patch"