[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