From 1913c3256bb657954dd84c3a73c11944a225ec04 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 7 Sep 2011 13:00:32 +1000 Subject: [PATCH] start_mdmon: provide more dynamic way to close-all-fds When forking mdmon we need to close all other fds because we don't use O_CLOEXEC yet. Any approach will be fairly arbitrary, but as we can expect fds to be fairly dense, closing until we find a set number that don't need closing is possible safer than only closing the first 100. So keep closing until we find 20 that are already closed. Signed-off-by: NeilBrown --- util.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/util.c b/util.c index ce032396..5617d029 100644 --- a/util.c +++ b/util.c @@ -1573,7 +1573,7 @@ int mdmon_running(int devnum) int start_mdmon(int devnum) { - int i; + int i, skipped; int len; pid_t pid; int status; @@ -1604,8 +1604,13 @@ int start_mdmon(int devnum) switch(fork()) { case 0: /* FIXME yuk. CLOSE_EXEC?? */ - for (i=3; i < 100; i++) - close(i); + skipped = 0; + for (i=3; skipped < 20; i++) + if (close(i) < 0) + skipped++; + else + skipped = 0; + for (i=0; paths[i]; i++) if (paths[i][0]) execl(paths[i], "mdmon", -- 2.39.2