The nofork option aims to reduce call of fork(), but it is not
effective. This patch lets cleanerd ignore the option simply even if
it is passed.

Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp>
---
 sbin/cleanerd/cleanerd.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)

diff --git a/sbin/cleanerd/cleanerd.c b/sbin/cleanerd/cleanerd.c
index e1f6a04..0b5bb70 100644
--- a/sbin/cleanerd/cleanerd.c
+++ b/sbin/cleanerd/cleanerd.c
@@ -113,7 +113,7 @@ do {                                                \
 const static struct option long_option[] = {
        {"conffile", required_argument, NULL, 'c'},
        {"help", no_argument, NULL, 'h'},
-       /* internal option for mount.nilfs2 only */
+       /* nofork option is obsolete. It does nothing even if passed */
        {"nofork", no_argument, NULL, 'n'},
        {"protection-period", required_argument, NULL, 'p'},
        {"version", no_argument, NULL, 'V'},
@@ -691,20 +691,18 @@ static int oom_adjust(void)
 #define DEVNULL        "/dev/null"
 #define ROOTDIR        "/"
 
-static int daemonize(int nochdir, int noclose, int nofork)
+static int daemonize(int nochdir, int noclose)
 {
        pid_t pid;
 
-       if (!nofork) {
-               pid = fork();
-               if (pid < 0)
-                       return -1;
-               else if (pid != 0)
-                       /* parent */
-                       _exit(0);
-       }
+       pid = fork();
+       if (pid < 0)
+               return -1;
+       else if (pid != 0)
+               /* parent */
+               _exit(0);
 
-       /* child or nofork */
+       /* child */
        if (setsid() < 0)
                return -1;
 
@@ -1491,7 +1489,7 @@ int main(int argc, char *argv[])
        char canonical[PATH_MAX + 2];
        const char *dev, *dir;
        char *endptr;
-       int status, nofork, c;
+       int status, c;
 #ifdef _GNU_SOURCE
        int option_index;
 #endif /* _GNU_SOURCE */
@@ -1499,7 +1497,6 @@ int main(int argc, char *argv[])
        progname = (strrchr(argv[0], '/') != NULL) ?
                strrchr(argv[0], '/') + 1 : argv[0];
        conffile = NILFS_CLEANERD_CONFFILE;
-       nofork = 0;
        status = 0;
        protection_period = ULONG_MAX;
        dev = NULL;
@@ -1520,8 +1517,7 @@ int main(int argc, char *argv[])
                        nilfs_cleanerd_usage(progname);
                        exit(0);
                case 'n':
-                       /* internal option for mount.nilfs2 only */
-                       nofork = 1;
+                       /* ignore nofork option, do nothing */
                        break;
                case 'p':
                        protection_period = strtoul(optarg, &endptr, 10);
@@ -1568,7 +1564,7 @@ int main(int argc, char *argv[])
                }
        }
 
-       if (daemonize(0, 0, nofork) < 0) {
+       if (daemonize(0, 0) < 0) {
                fprintf(stderr, "%s: %s\n", progname, strerror(errno));
                exit(1);
        }
-- 
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to