diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-05-02 17:04:50 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-05-02 17:04:50 +0000 |
| commit | bff439345cafa59a4bd72c2a20591e7bd8441b47 (patch) | |
| tree | 6dec677348dfb61fff299fb164300387bd57ec0b | |
| parent | 777100e73376d0977ee4300b5580670edb6df08f (diff) | |
| download | mdevd-bff439345cafa59a4bd72c2a20591e7bd8441b47.tar.gz | |
Increase default kbufsz to 1 MiB; don't die on ENOBUFS (but spam)
Signed-off-by: Laurent Bercot <ska@appnovation.com>
| -rw-r--r-- | doc/mdevd-coldplug.html | 6 | ||||
| -rw-r--r-- | doc/mdevd.html | 6 | ||||
| -rw-r--r-- | src/mdevd/mdevd-coldplug.c | 4 | ||||
| -rw-r--r-- | src/mdevd/mdevd.c | 2 | ||||
| -rw-r--r-- | src/mdevd/mdevd_uevent_read.c | 13 |
5 files changed, 18 insertions, 13 deletions
diff --git a/doc/mdevd-coldplug.html b/doc/mdevd-coldplug.html index 36654eb..b26d4c9 100644 --- a/doc/mdevd-coldplug.html +++ b/doc/mdevd-coldplug.html @@ -28,7 +28,7 @@ for all these devices. <h2> Interface </h2> <pre> - mdevd-coldplug [ -v <em>verbosity</em> ] [ -s <em>slashsys</em> ] [ -O <em>nlgroup</em> ] [ -b <em>kbufsize</em> ] + mdevd-coldplug [ -v <em>verbosity</em> ] [ -s <em>slashsys</em> ] [ -O <em>nlgroup</em> ] [ -b <em>kbufsz</em> ] </pre> <ul> @@ -57,8 +57,8 @@ if <a href="mdevd.html">mdevd</a> is running with a similar <tt>-O</tt> option with a compatible value; else, <tt>mdevd-coldplug</tt> will wait forever. </li> <li> <tt>-b</tt> <em>kbufsz</em> : try and reserve a kernel buffer of -<em>kbufsz</em> bytes for the netlink queue. The default is 500 kB; -if you're getting "No buffer space available" errors, try increasing this number. +<em>kbufsz</em> bytes for the netlink queue. The default is 1 MiB; +if you're getting related warnings on stderr, try increasing this number. This option is only meaningful when paired with the <tt>-O</tt> option. </li> </ul> diff --git a/doc/mdevd.html b/doc/mdevd.html index ca39b02..7c2a869 100644 --- a/doc/mdevd.html +++ b/doc/mdevd.html @@ -119,9 +119,9 @@ cause a loop by chaining two separate instances of mdevd. mdevd will protect you against accidents, not against intentional stupidity.) </li> <li> <tt>-b</tt> <em>kbufsz</em> : try and reserve a kernel buffer of <em>kbufsz</em> bytes for the netlink queue. Too large a buffer wastes kernel memory; -too small a buffer risks losing events. The default is <strong>512288</strong>, -meaning 500 kB, which should be -enough for most systems; if you're getting "No buffer space available" errors +too small a buffer risks losing events. The default is <strong>1048576</strong>, +meaning 1 MiB, which should be +enough for most systems; if you're getting "missed events" warnings from mdevd at coldplug time, try increasing this number. </li> <li> <tt>-n</tt> : dry run. mdevd will not create or delete device nodes, and it will not spawn commands. Instead, it will print to stdout diff --git a/src/mdevd/mdevd-coldplug.c b/src/mdevd/mdevd-coldplug.c index 6b8953f..1dd0982 100644 --- a/src/mdevd/mdevd-coldplug.c +++ b/src/mdevd/mdevd-coldplug.c @@ -15,7 +15,7 @@ #include "mdevd-internal.h" -#define USAGE "mdevd-coldplug [ -v verbosity ] [ -s slashsys ] [ -O nlgroup ] [ -b kbufsize ]" +#define USAGE "mdevd-coldplug [ -v verbosity ] [ -s slashsys ] [ -O nlgroup ] [ -b kbufsz ]" #define dieusage() strerr_dieusage(100, USAGE) static char subsystem[PATH_MAX] = "" ; @@ -95,7 +95,7 @@ int main (int argc, char const *const *argv, char const *const *envp) char const *slashsys = "/sys" ; unsigned int verbosity = 1 ; unsigned int nlgroup = 0 ; - unsigned int kbufsz = 512288 ; + unsigned int kbufsz = 1048576 ; int nlfd = -1 ; PROG = "mdevd-coldplug" ; { diff --git a/src/mdevd/mdevd.c b/src/mdevd/mdevd.c index 6b82874..f5222f7 100644 --- a/src/mdevd/mdevd.c +++ b/src/mdevd/mdevd.c @@ -904,7 +904,7 @@ int main (int argc, char const *const *argv) char const *configfile = "/etc/mdev.conf" ; iopause_fd x[2] = { { .events = IOPAUSE_READ }, { .events = IOPAUSE_READ } } ; unsigned int notif = 0 ; - unsigned int kbufsz = 512288 ; + unsigned int kbufsz = 1048576 ; char const *slashdev = "/dev" ; int docoldplug = 0 ; unsigned int intake = 1 ; diff --git a/src/mdevd/mdevd_uevent_read.c b/src/mdevd/mdevd_uevent_read.c index 1c84f2d..38be5ea 100644 --- a/src/mdevd/mdevd_uevent_read.c +++ b/src/mdevd/mdevd_uevent_read.c @@ -38,10 +38,15 @@ static inline size_t netlink_read (int fd, char *s, uint32_t options, unsigned i .msg_controllen = 0, .msg_flags = 0 } ; - ssize_t r = sanitize_read(fd_recvmsg(fd, &msg)) ; - if (r < 0) - strerr_diefu1sys(111, "receive netlink message") ; - if (!r) return 0 ; + ssize_t r ; + for (;;) + { + r = sanitize_read(fd_recvmsg(fd, &msg)) ; + if (r > 0) break ; + if (!r) return 0 ; + if (errno != ENOBUFS) strerr_diefu1sys(111, "read netlink message") ; + strerr_warnw1x("missed events! you should increase the -b kbufsz value") ; + } if (msg.msg_flags & MSG_TRUNC) strerr_diefu1x(111, "buffer too small for netlink message") ; if (options & 1 && nl.nl_pid) |
