[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH 3/8] mdev: move daemon setup to dedicated function
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2020-11-22 13:45:17
Message-ID: CAK1hOcNnY1wsd_c1GTHQuuYo29WtGh4rBL3cDWcmAgFKzGez8g () mail ! gmail ! com
[Download RAW message or body]
Applied, thanks
On Mon, Dec 16, 2019 at 10:57 PM Jan Klötzke <jan@kloetzke.net> wrote:
>
> Signed-off-by: Jan Klötzke <jan@kloetzke.net>
> ---
> util-linux/mdev.c | 44 +++++++++++++++++++++++++++-----------------
> 1 file changed, 27 insertions(+), 17 deletions(-)
>
> diff --git a/util-linux/mdev.c b/util-linux/mdev.c
> index 4e3299d22..cfc1a38bc 100644
> --- a/util-linux/mdev.c
> +++ b/util-linux/mdev.c
> @@ -1172,6 +1172,29 @@ static void initial_scan(char *temp)
> # define RCVBUF (128 * 1024 * 1024)
> # define MAX_ENV 32
>
> +static int daemon_init(char *temp)
> +{
> + int fd;
> +
> + /* Subscribe for UEVENT kernel messages */
> + /* Without a sufficiently big RCVBUF, a ton of simultaneous events
> + * can trigger ENOBUFS on read, which is unrecoverable.
> + * Reproducer:
> + * mdev -d
> + * find /sys -name uevent -exec sh -c 'echo add >"{}"' ';'
> + */
> + fd = create_and_bind_to_netlink(NETLINK_KOBJECT_UEVENT, 1 << 0, RCVBUF);
> +
> + /*
> + * Make inital scan after the uevent socket is alive and
> + * _before_ we fork away. Already open mdev.log because we work
> + * in daemon mode.
> + */
> + initial_scan(temp);
> +
> + return fd;
> +}
> +
> static void daemon_loop(char *temp, int fd)
> {
> for (;;) {
> @@ -1241,24 +1264,11 @@ int mdev_main(int argc UNUSED_PARAM, char **argv)
> #if ENABLE_FEATURE_MDEV_DAEMON
> if (opt & MDEV_OPT_DAEMON) {
> /*
> - * Daemon mode listening on uevent netlink socket.
> - */
> - int fd;
> -
> - /* Subscribe for UEVENT kernel messages */
> - /* Without a sufficiently big RCVBUF, a ton of simultaneous events
> - * can trigger ENOBUFS on read, which is unrecoverable.
> - * Reproducer:
> - * mdev -d
> - * find /sys -name uevent -exec sh -c 'echo add >"{}"' ';'
> - */
> - fd = create_and_bind_to_netlink(NETLINK_KOBJECT_UEVENT, 1 << 0, RCVBUF);
> -
> - /*
> - * Make inital scan after the uevent socket is alive and
> - * _before_ we fork away.
> + * Daemon mode listening on uevent netlink socket. Fork away
> + * after initial scan so that caller can be sure everything
> + * is up-to-date when mdev process returns.
> */
> - initial_scan(temp);
> + int fd = daemon_init(temp);
>
> if (!(opt & MDEV_OPT_FOREGROUND))
> bb_daemonize_or_rexec(0, argv);
> --
> 2.20.1
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic