From a4df81f8ada6beac3ec1a59cfb78589c65bd1076 Mon Sep 17 00:00:00 2001 From: Erez Zadok Date: Tue, 28 Mar 2006 16:19:30 +0000 Subject: [PATCH] * doc/am-utils.texi, scripts/{amd.conf.5,amd.conf-sample}: document new nfs_retransmit_counter_toplvl and nfs_retry_interval_toplvl global amd.conf parameters. * amd/conf.c (gopt_nfs_retransmit_counter_toplvl, (gopt_nfs_retry_interval_toplvl): parse amd.conf nfs_retransmit_counter_toplvl and nfs_retry_interval_toplvl global parameters. * amd/amfs_toplvl.c (amfs_toplvl_mount): support setting toplvl timeo/retrans parameters for Amd's toplvl mounts, separately from all other UDP or NFS mounts. * amd/amd.h: define a new timeo/retrans parameter for toplvl mounts. --- ChangeLog | 18 ++++++++++++++++++ NEWS | 8 ++++++++ amd/amd.c | 6 +++--- amd/amd.h | 14 ++++++++++---- amd/amfs_toplvl.c | 27 +++++++++++++++------------ amd/conf.c | 22 +++++++++++++++++++++- amd/get_args.c | 4 ++-- doc/am-utils.texi | 38 ++++++++++++++++++++++++++++++++++---- scripts/amd.conf-sample | 4 ++++ scripts/amd.conf.5 | 12 ++++++++++++ 10 files changed, 127 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8698261..292bb4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2006-03-27 Erez Zadok + + * doc/am-utils.texi, scripts/{amd.conf.5,amd.conf-sample}: + document new nfs_retransmit_counter_toplvl and + nfs_retry_interval_toplvl global amd.conf parameters. + + * amd/conf.c (gopt_nfs_retransmit_counter_toplvl, + (gopt_nfs_retry_interval_toplvl): parse amd.conf + nfs_retransmit_counter_toplvl and nfs_retry_interval_toplvl global + parameters. + + * amd/amfs_toplvl.c (amfs_toplvl_mount): support setting toplvl + timeo/retrans parameters for Amd's toplvl mounts, separately from + all other UDP or NFS mounts. + + * amd/amd.h: define a new timeo/retrans parameter for toplvl + mounts. + 2006-03-22 Erez Zadok * minor new port: i386-pc-linux-suse10.1 (beta 8). diff --git a/NEWS b/NEWS index bac6789..4b4de70 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,14 @@ Support new mount options for type:=pcfs mounts: longname, nowin95, shortname, user=N, group=N, mask=N, and dirmask=N. +Two new amd.conf [global] parameters: nfs_retry_interval_toplvl and +nfs_retransmit_counter_toplvl. They are similar to nfs_retry_interval and +nfs_retransmit_counter, and allow you to set the "timeo" and "retrans" NFS +mount parameters, respectively, but ONLY for Amd's top-level mounts (which +are NFSv2/UDP currently). This is useful because on some systems you may +wish to set these parameters differently than the OS default, so as to +better tune Amd's responsiveness under heavy scheduler loads. + - minor new ports: i386-pc-linux-fc5 (Fedora Core 5) i386-pc-linux-suse10.1 (beta 8) diff --git a/amd/amd.c b/amd/amd.c index 6ce3da3..905bfff 100644 --- a/amd/amd.c +++ b/amd/amd.c @@ -289,10 +289,10 @@ init_global_options(void) /* local domain */ gopt.sub_domain = NULL; - /* reset NFS retransmit counter and retry interval */ + /* reset NFS (and toplvl) retransmit counter and retry interval */ for (i=0; imf_ops->fs_type, mf->mf_info); -#else /* not WANT_TIMEO_AND_RETRANS_ON_TOPLVL */ + /* write most of the initial options + preopts */ xsnprintf(opts, sizeof(opts), "%s%s,%s=%d,%s,map=%s", preopts, MNTTAB_OPT_RW, MNTTAB_OPT_PORT, nfs_port, mf->mf_ops->fs_type, mf->mf_info); -#endif /* not WANT_TIMEO_AND_RETRANS_ON_TOPLVL */ + + /* process toplvl timeo/retrans options, if any */ + if (gopt.amfs_auto_timeo[AMU_TYPE_TOPLVL] > 0) { + xsnprintf(toplvl_opts, sizeof(toplvl_opts), ",%s=%d", + MNTTAB_OPT_TIMEO, gopt.amfs_auto_timeo[AMU_TYPE_TOPLVL]); + xstrlcat(opts, toplvl_opts, sizeof(opts)); + } + if (gopt.amfs_auto_retrans[AMU_TYPE_TOPLVL] > 0) { + xsnprintf(toplvl_opts, sizeof(toplvl_opts), ",%s=%d", + MNTTAB_OPT_RETRANS, gopt.amfs_auto_retrans[AMU_TYPE_TOPLVL]); + xstrlcat(opts, toplvl_opts, sizeof(opts)); + } + #ifdef MNTTAB_OPT_NOAC if (gopt.auto_attrcache == 0) { xstrlcat(opts, ",", sizeof(opts)); diff --git a/amd/conf.c b/amd/conf.c index 86d361f..7b002a6 100644 --- a/amd/conf.c +++ b/amd/conf.c @@ -111,11 +111,13 @@ static int gopt_preferred_amq_port(const char *val); static int gopt_nfs_allow_insecure_port(const char *val); static int gopt_nfs_proto(const char *val); static int gopt_nfs_retransmit_counter(const char *val); -static int gopt_nfs_retransmit_counter_tcp(const char *val); static int gopt_nfs_retransmit_counter_udp(const char *val); +static int gopt_nfs_retransmit_counter_tcp(const char *val); +static int gopt_nfs_retransmit_counter_toplvl(const char *val); static int gopt_nfs_retry_interval(const char *val); static int gopt_nfs_retry_interval_udp(const char *val); static int gopt_nfs_retry_interval_tcp(const char *val); +static int gopt_nfs_retry_interval_toplvl(const char *val); static int gopt_nfs_vers(const char *val); static int gopt_nis_domain(const char *val); static int gopt_normalize_hostnames(const char *val); @@ -194,9 +196,11 @@ static struct _func_map glob_functable[] = { {"nfs_retransmit_counter", gopt_nfs_retransmit_counter}, {"nfs_retransmit_counter_udp", gopt_nfs_retransmit_counter_udp}, {"nfs_retransmit_counter_tcp", gopt_nfs_retransmit_counter_tcp}, + {"nfs_retransmit_counter_toplvl", gopt_nfs_retransmit_counter_toplvl}, {"nfs_retry_interval", gopt_nfs_retry_interval}, {"nfs_retry_interval_udp", gopt_nfs_retry_interval_udp}, {"nfs_retry_interval_tcp", gopt_nfs_retry_interval_tcp}, + {"nfs_retry_interval_toplvl", gopt_nfs_retry_interval_toplvl}, {"nfs_vers", gopt_nfs_vers}, {"nis_domain", gopt_nis_domain}, {"normalize_hostnames", gopt_normalize_hostnames}, @@ -881,6 +885,14 @@ gopt_nfs_retransmit_counter_tcp(const char *val) } +static int +gopt_nfs_retransmit_counter_toplvl(const char *val) +{ + gopt.amfs_auto_retrans[AMU_TYPE_TOPLVL] = atoi(val); + return 0; +} + + static int gopt_nfs_retry_interval(const char *val) { @@ -908,6 +920,14 @@ gopt_nfs_retry_interval_tcp(const char *val) } +static int +gopt_nfs_retry_interval_toplvl(const char *val) +{ + gopt.amfs_auto_timeo[AMU_TYPE_TOPLVL] = atoi(val); + return 0; +} + + static int gopt_nfs_vers(const char *val) { diff --git a/amd/get_args.c b/amd/get_args.c index e2208d8..578d64e 100644 --- a/amd/get_args.c +++ b/amd/get_args.c @@ -229,7 +229,7 @@ get_args(int argc, char *argv[]) break; case 't': - /* timeo.retrans */ + /* timeo.retrans (also affects toplvl mounts) */ { char *dot = strchr(optarg, '.'); int i; @@ -411,7 +411,7 @@ get_args(int argc, char *argv[]) if (gopt.cluster == NULL) gopt.cluster = hostdomain; - /* sanity checking, normalize values just in case */ + /* sanity checking, normalize values just in case (toplvl too) */ for (i=0; i