From 8f4b4516cb37211057e775756b5701c4be050648 Mon Sep 17 00:00:00 2001 From: hjl Date: Tue, 5 Jun 2001 21:24:40 +0000 Subject: [PATCH] 2001-06-05 H.J. Lu * utils/mountd/mountd.c (longopts): Add "foreground/d". (main): Support --foreground/-d to set the limit of the number of open file descriptors. (usage): Updated. * utils/mountd/mountd.man: Updated for --foreground/-d. --- ChangeLog | 9 +++++++++ utils/mountd/mountd.c | 35 ++++++++++++++++++++++++++++++----- utils/mountd/mountd.man | 8 ++++++-- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5351d54..0cf5dc6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2001-06-05 H.J. Lu + + * utils/mountd/mountd.c (longopts): Add "foreground/d". + (main): Support --foreground/-d to set the limit of the number + of open file descriptors. + (usage): Updated. + + * utils/mountd/mountd.man: Updated for --foreground/-d. + 2001-06-04 H.J. Lu * nfs-utils.spec (Release): Set to 6. diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index 14f5fa2..b577971 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "xmalloc.h" #include "misc.h" #include "mountd.h" @@ -30,6 +31,7 @@ static struct nfs_fh_len *get_rootfh(struct svc_req *, dirpath *, int *, int v3) static struct option longopts[] = { { "foreground", 0, 0, 'F' }, + { "descriptors", 0, 0, 'o' }, { "debug", 1, 0, 'd' }, { "help", 0, 0, 'h' }, { "exports-file", 1, 0, 'f' }, @@ -390,13 +392,23 @@ main(int argc, char **argv) char *export_file = _PATH_EXPORTS; int foreground = 0; int port = 0; + int descriptors = 256; int c; struct sigaction sa; + struct rlimit rlim; /* Parse the command line options and arguments. */ opterr = 0; - while ((c = getopt_long(argc, argv, "Fd:f:p:P:hN:V:v", longopts, NULL)) != EOF) + while ((c = getopt_long(argc, argv, "o:Fd:f:p:P:hN:V:v", longopts, NULL)) != EOF) switch (c) { + case 'o': + descriptors = atoi(optarg); + if (descriptors <= 0) { + fprintf(stderr, "%s: bad descriptors: %s\n", + argv [0], optarg); + usage(argv [0], 1); + } + break; case 'F': foreground = 1; break; @@ -447,6 +459,19 @@ main(int argc, char **argv) exit(1); } + if (getrlimit (RLIMIT_NOFILE, &rlim) != 0) { + fprintf(stderr, "%s: getrlimit (RLIMIT_NOFILE) failed: %s\n", + argv [0], strerror(errno)); + exit(1); + } + + rlim.rlim_cur = descriptors; + if (setrlimit (RLIMIT_NOFILE, &rlim) != 0) { + fprintf(stderr, "%s: setrlimit (RLIMIT_NOFILE) failed: %s\n", + argv [0], strerror(errno)); + exit(1); + } + /* Initialize logging. */ /* xlog_open("mountd"); */ @@ -507,9 +532,9 @@ static void usage(const char *prog, int n) { fprintf(stderr, -"Usage: %s [-Fhnv] [-d kind] [-f exports-file] [-V version]\n" -" [-N version] [--debug kind] [-p|--port port] [--help] [--version]\n" -" [--exports-file=file] [--nfs-version version]\n" -" [--no-nfs-version version] [--no-tcp]\n", prog); +"Usage: %s [-F|--foreground] [-h|--help] [-v|--version] [-d kind|--debug kind]\n" +" [-o num|--descriptors num] [-f exports-file|--exports-file=file]\n" +" [-p|--port port] [-V version|--nfs-version version]\n" +" [-N version|--no-nfs-version version] [-n|--no-tcp]\n", prog); exit(n); } diff --git a/utils/mountd/mountd.man b/utils/mountd/mountd.man index c38d5e2..1a7e005 100644 --- a/utils/mountd/mountd.man +++ b/utils/mountd/mountd.man @@ -55,8 +55,8 @@ a stale entry will remain in .BR rmtab . .SH OPTIONS .TP -.B \-d " or " \-\-debug -Turn on debugging. +.B \-d kind " or " \-\-debug kind +Turn on debugging for kind. .TP .B \-F " or " \-\-foreground Run in foreground (do not daemonize) @@ -72,6 +72,10 @@ By default, export information is read from .B \-h " or " \-\-help Display usage message. .TP +.B \-o num " or " \-\-descriptors num +Set the limit of the number of open file descriptors to num. The +default is 256. +.TP .B \-N " or " \-\-no-nfs-version This option can be used to request that .B rpc.mountd -- 2.39.2