Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp6781765pxb; Wed, 17 Feb 2021 13:18:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJw0rmelYdwBPDq2/jbPDibMzG64dkZBf2o1Y1F/4siumcGAiFMed2s0b2Sj/68EF8Z/1k2j X-Received: by 2002:a50:fe02:: with SMTP id f2mr743986edt.173.1613596734177; Wed, 17 Feb 2021 13:18:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613596734; cv=none; d=google.com; s=arc-20160816; b=CWwwFBWI52tlm5QskKMCVwHewRtBVgE+Z01Lw4HnVtY1oNlIgX+irZsJVcUJpad3Hy MV/fxE+TR+lNpnsMv/Oh4LNzhHr+mVTYWkoY4MxpgyZNybM7W3tATy5UTUdQEqq3cKaD 0tbOscmO2rim/w7ajGwmum4TJMqw7HRXuCvjvnOZTfqioYQpsFjzXXJDgjC8rq8CjERn pyqjtIOxfEZ5EwuvqnPrNhfG4brTaVGSNB8PYxWLWP6wnd0X0U+mYSRj1xm33DrXbKP/ S6ttrE73Vxn3veL/kdfZripSsjw+Ci/6+DwYydrTHMAz6vkchoQgdTTw3H9iTQQz/Ons KjNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=0E8nZ22o3M8b/EgiluGmjSKJ6QV1F4Bgh48NBBVf/oQ=; b=N1MmOXhvxNW7RU5yB3xigMZeFNHFzF1cTLu76QMC0v3TawPHnmfVEbliem3Ayyku8q I8qaxV6wHR4JiS77DGamgMYAXE9gBqHf8DW/Yq4kRe6tm/fyXqhPQA4tsGPppAX4XOSi JCegYMAhSyC1CCyWVnO7bvt7isiWBnRy8NpFLG3Sefo7oVJRS6ow0+rNj/6LuF+sdmrx F/H9HFmCdmh0jAmbh/e8vj//UkBhSTSuAFJgXkRPXvjq/RFcwnZ1dtmrErRBINcw2P5m BhZLNEnZC/30YxtGTJwOgPThAPkkbS1rx7xfgG8+7FLJ+2XE0WBKvsodmrMEiLnXT2cm gU2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=PYWe7AX0; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v7si2395932edj.572.2021.02.17.13.18.16; Wed, 17 Feb 2021 13:18:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=PYWe7AX0; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232666AbhBQTmg (ORCPT + 99 others); Wed, 17 Feb 2021 14:42:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:59219 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233375AbhBQTmf (ORCPT ); Wed, 17 Feb 2021 14:42:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1613590868; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0E8nZ22o3M8b/EgiluGmjSKJ6QV1F4Bgh48NBBVf/oQ=; b=PYWe7AX00RqOjgTH7XhXTGynQSDQynFo39nEh9s/tXDlbDBh2i2E+C+rFsQyVxkrgrwr7j TFUsvesQAR2V48MIAVWiZKhaJtIUFEPIGZ3oZBG4LYXbbVZiD+xNlTWCsT7shIwJFeezNu CKbokD11ylBo3l45FmuJDEktkg3X5Nw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-291-3tfAr9QQM12eRUcELJnzCQ-1; Wed, 17 Feb 2021 14:41:06 -0500 X-MC-Unique: 3tfAr9QQM12eRUcELJnzCQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 97D3DEC1A2 for ; Wed, 17 Feb 2021 19:41:05 +0000 (UTC) Received: from madhat.home.dicksonnet.net (ovpn-112-108.phx2.redhat.com [10.3.112.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 56E5418B5E for ; Wed, 17 Feb 2021 19:41:05 +0000 (UTC) From: Steve Dickson To: Linux NFS Mailing list Subject: [PATCH 4/6] exportd/exportfs: Add the state-directory-path option Date: Wed, 17 Feb 2021 14:42:38 -0500 Message-Id: <20210217194240.79915-5-steved@redhat.com> In-Reply-To: <20210217194240.79915-1-steved@redhat.com> References: <20210217194240.79915-1-steved@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Ported state-directory-path option from mountd (commit a15bd948) Signed-off-by: Steve Dickson --- nfs.conf | 1 + systemd/nfs.conf.man | 3 ++- utils/exportd/exportd.c | 35 +++++++++++++++++++++++++++-------- utils/exportfs/exportfs.c | 25 +++++++++++++++++-------- utils/exportfs/exportfs.man | 7 +++++-- 5 files changed, 52 insertions(+), 19 deletions(-) diff --git a/nfs.conf b/nfs.conf index 4b344fa..bebb2e3 100644 --- a/nfs.conf +++ b/nfs.conf @@ -31,6 +31,7 @@ # [exportd] # debug="all|auth|call|general|parse" +# state-directory-path=/var/lib/nfs # threads=1 [mountd] # debug="all|auth|call|general|parse" diff --git a/systemd/nfs.conf.man b/systemd/nfs.conf.man index a4379fd..d2187f8 100644 --- a/systemd/nfs.conf.man +++ b/systemd/nfs.conf.man @@ -131,7 +131,8 @@ but on the server, this will resolve to the path .TP .B exportd Recognized values: -.B threads +.BR threads , +.BR state-directory-path See .BR exportd (8) diff --git a/utils/exportd/exportd.c b/utils/exportd/exportd.c index bf5f431..be6a2a5 100644 --- a/utils/exportd/exportd.c +++ b/utils/exportd/exportd.c @@ -26,7 +26,6 @@ extern void my_svc_run(void); struct state_paths etab; -struct state_paths rmtab; /* Number of mountd threads to start. Default is 1 and * that's probably enough unless you need hundreds of @@ -80,6 +79,12 @@ wait_for_workers (void) } } +inline void +cleanup_lockfiles (void) +{ + unlink(etab.lockfn); +} + /* Fork num_threads worker children and wait for them */ static void fork_workers(void) @@ -117,6 +122,8 @@ fork_workers(void) /* in parent */ wait_for_workers(); + cleanup_lockfiles(); + free_state_path_names(&etab); xlog(L_NOTICE, "exportd: no more workers, exiting\n"); exit(0); } @@ -129,6 +136,8 @@ killer (int sig) kill(0, SIGTERM); wait_for_workers(); } + cleanup_lockfiles(); + free_state_path_names(&etab); xlog (L_NOTICE, "Caught signal %d, exiting.", sig); exit(0); @@ -159,24 +168,33 @@ set_signals(void) sa.sa_handler = sig_hup; sigaction(SIGHUP, &sa, NULL); } + static void usage(const char *prog, int n) { fprintf(stderr, "Usage: %s [-f|--foreground] [-h|--help] [-d kind|--debug kind]\n" +" [-s|--state-directory-path path]\n" " [-t num|--num-threads=num]\n", prog); exit(n); } inline static void -read_exportd_conf(char *progname) +read_exportd_conf(char *progname, char **argv) { + char *s; + conf_init_file(NFS_CONFFILE); xlog_from_conffile(progname); num_threads = conf_get_num("exportd", "threads", num_threads); + + s = conf_get_str("exportd", "state-directory-path"); + if (s && !state_setup_basedir(argv[0], s)) + exit(1); } + int main(int argc, char **argv) { @@ -194,9 +212,9 @@ main(int argc, char **argv) xlog_open(progname); /* Read in config setting */ - read_exportd_conf(progname); + read_exportd_conf(progname, argv); - while ((c = getopt_long(argc, argv, "d:fht:", longopts, NULL)) != EOF) { + while ((c = getopt_long(argc, argv, "d:fhs:t:", longopts, NULL)) != EOF) { switch (c) { case 'd': xlog_sconfig(optarg, 1); @@ -207,6 +225,10 @@ main(int argc, char **argv) case 'h': usage(progname, 0); break; + case 's': + if (!state_setup_basedir(argv[0], optarg)) + exit(1); + break; case 't': num_threads = atoi (optarg); break; @@ -219,9 +241,7 @@ main(int argc, char **argv) if (!setup_state_path_names(progname, ETAB, ETABTMP, ETABLCK, &etab)) return 1; - if (!setup_state_path_names(progname, RMTAB, RMTABTMP, RMTABLCK, &rmtab)) - return 1; - + if (!foreground) xlog_stderr(0); @@ -252,6 +272,5 @@ main(int argc, char **argv) progname); free_state_path_names(&etab); - free_state_path_names(&rmtab); exit(1); } diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c index 9fcae0b..fcab3b1 100644 --- a/utils/exportfs/exportfs.c +++ b/utils/exportfs/exportfs.c @@ -91,7 +91,23 @@ release_lockfile() _lockfd = -1; } } +inline static void +read_exportfs_conf(char **argv) +{ + char *s; + + conf_init_file(NFS_CONFFILE); + xlog_from_conffile("exportfs"); + + /* NOTE: following uses "mountd" section of nfs.conf !!!! */ + s = conf_get_str("mountd", "state-directory-path"); + /* Also look in the exportd section */ + if (s == NULL) + s = conf_get_str("exportd", "state-directory-path"); + if (s && !state_setup_basedir(argv[0], s)) + exit(1); +} int main(int argc, char **argv) { @@ -105,7 +121,6 @@ main(int argc, char **argv) int f_ignore = 0; int i, c; int force_flush = 0; - char *s; if ((progname = strrchr(argv[0], '/')) != NULL) progname++; @@ -116,15 +131,9 @@ main(int argc, char **argv) xlog_stderr(1); xlog_syslog(0); - conf_init_file(NFS_CONFFILE); - xlog_from_conffile("exportfs"); + read_exportfs_conf(argv); nfsd_path_init(); - /* NOTE: following uses "mountd" section of nfs.conf !!!! */ - s = conf_get_str("mountd", "state-directory-path"); - if (s && !state_setup_basedir(argv[0], s)) - exit(1); - while ((c = getopt(argc, argv, "ad:fhio:ruvs")) != EOF) { switch(c) { case 'a': diff --git a/utils/exportfs/exportfs.man b/utils/exportfs/exportfs.man index 91d3589..6d417a7 100644 --- a/utils/exportfs/exportfs.man +++ b/utils/exportfs/exportfs.man @@ -167,9 +167,11 @@ When a list is given, the members should be comma-separated. .B exportfs will also recognize the .B state-directory-path -value from the +value from both the .B [mountd] -section. +section and the +.B [exportd] +section .SH DISCUSSION .SS Exporting Directories @@ -327,6 +329,7 @@ table of clients accessing server's exports .BR exports (5), .BR nfs.conf (5), .BR rpc.mountd (8), +.BR exportd (8), .BR netgroup (5) .SH AUTHORS Olaf Kirch -- 2.29.2