Commit 50d4d073 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

netlink: increase the receive buffer size

Currently the buffer size is 4096. It always works because
we use hosts where PAGE_SIZE is 4096. PowerPC64 has a bigger PAGE_SIZE.

Here is a comment from the kernel code.
/*
 *      skb should fit one page. This choice is good for headerless malloc.
 *      But we should limit to 8K so that userspace does not have to
 *      use enormous buffer sizes on recvmsg() calls just to avoid
 *      MSG_TRUNC when PAGE_SIZE is very large.
 */

We set the buffer size to 16384, because it's the max length of recvmsg()
for this case. We will need less iterations to collect all data, so
the perfomance should be better.
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Cc: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 675a84fb
...@@ -73,7 +73,7 @@ int do_rtnl_req(int nl, void *req, int size, ...@@ -73,7 +73,7 @@ int do_rtnl_req(int nl, void *req, int size,
struct msghdr msg; struct msghdr msg;
struct sockaddr_nl nladdr; struct sockaddr_nl nladdr;
struct iovec iov; struct iovec iov;
static char buf[4096]; static char buf[16384];
int err; int err;
if (!error_callback) if (!error_callback)
...@@ -121,6 +121,12 @@ int do_rtnl_req(int nl, void *req, int size, ...@@ -121,6 +121,12 @@ int do_rtnl_req(int nl, void *req, int size,
if (err == 0) if (err == 0)
break; break;
if (msg.msg_flags & MSG_TRUNC) {
pr_err("Message truncated\n");
err = -EMSGSIZE;
goto err;
}
err = nlmsg_receive(buf, err, receive_callback, error_callback, arg); err = nlmsg_receive(buf, err, receive_callback, error_callback, arg);
if (err < 0) if (err < 0)
goto err; goto err;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment