- use_hostname_for_mounts shouldn't prevent selection among replicas.
- fix monotonic_elapse. - Makefiles.rules: remove 'samples' from SUBDIRS.
This commit is contained in:
parent
47e7470d27
commit
a2613263d4
@ -0,0 +1,66 @@
|
||||
autofs-5.1.4 - Makefiles.rules: remove 'samples' from SUBDIRS
|
||||
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
|
||||
The rules in Makefile make it quite clear that
|
||||
'samples' is not expected to be part of SUBDIRS.
|
||||
e.g.
|
||||
- The rule for "clean" handles both $(SUBDIRS) *and* samples.
|
||||
- There are separate "install" and "install_samples" targets.
|
||||
|
||||
However SUBDIRS does contain 'samples'. This means that
|
||||
a simple "make; make install" will over-write your configuration files.
|
||||
|
||||
So remove 'samples' from SUBDIRS. Note that it has been removed in
|
||||
the past, but then got added back again.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Ian Kent <raven@themaw.net>
|
||||
---
|
||||
CHANGELOG | 1 +
|
||||
Makefile.rules | 2 +-
|
||||
autofs.spec | 6 ++++++
|
||||
3 files changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/CHANGELOG b/CHANGELOG
|
||||
index 313730b1..1e5ec15b 100644
|
||||
--- a/CHANGELOG
|
||||
+++ b/CHANGELOG
|
||||
@@ -11,6 +11,7 @@ xx/xx/2018 autofs-5.1.5
|
||||
- account for recent libnsl changes.
|
||||
- use_hostname_for_mounts shouldn't prevent selection among replicas.
|
||||
- fix monotonic_elapsed.
|
||||
+- Makefiles.rules: remove 'samples' from SUBDIRS.
|
||||
|
||||
19/12/2017 autofs-5.1.4
|
||||
- fix spec file url.
|
||||
diff --git a/Makefile.rules b/Makefile.rules
|
||||
index 2bfa043c..4deab3b9 100644
|
||||
--- a/Makefile.rules
|
||||
+++ b/Makefile.rules
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
|
||||
# Root directory contents
|
||||
-SUBDIRS = lib daemon modules man samples
|
||||
+SUBDIRS = lib daemon modules man
|
||||
INCDIRS = include
|
||||
INCFILES = COPYING COPYRIGHT NEWS README* TODO Makefile Makefile.rules \
|
||||
Makefile.conf.in .version .autofs-* configure.in aclocal.m4 \
|
||||
diff --git a/autofs.spec b/autofs.spec
|
||||
index 6da0655d..57d8db46 100644
|
||||
--- a/autofs.spec
|
||||
+++ b/autofs.spec
|
||||
@@ -121,6 +121,12 @@ install -m 755 redhat/autofs.init $RPM_BUILD_ROOT/etc/rc.d/init.d/autofs
|
||||
install -m 644 redhat/autofs.conf $RPM_BUILD_ROOT/etc/autofs.conf
|
||||
install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
|
||||
|
||||
+install -m 644 samples/auto.master $RPM_BUILD_ROOT/etc/auto.master
|
||||
+install -m 644 samples/auto.misc $RPM_BUILD_ROOT/etc/auto.misc
|
||||
+install -m 644 samples/auto.net $RPM_BUILD_ROOT/etc/auto.net
|
||||
+install -m 644 samples/auto.smb $RPM_BUILD_ROOT/etc/auto.smb
|
||||
+install -m 644 samples/autofs_ldap_auth.conf $RPM_BUILD_ROOT/etc/autofs_ldap_auth.conf
|
||||
+
|
||||
%clean
|
||||
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
|
||||
|
49
autofs-5.1.4-fix-monotonic_elapsed.patch
Normal file
49
autofs-5.1.4-fix-monotonic_elapsed.patch
Normal file
@ -0,0 +1,49 @@
|
||||
autofs-5.1.4 - fix monotonic_elapsed
|
||||
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
|
||||
When automount probes multiple hosts to find the one which
|
||||
responds most quickly, it currently ignores the nanoseconds.
|
||||
This often makes the cost "0", which makes weights ineffective.
|
||||
|
||||
The cause is that monotonic_elapsed() casts tv_nsec to a
|
||||
double *after* dividing by 1 billion, rather than before.
|
||||
|
||||
With this change, weights become effective for choosing
|
||||
between hosts which respond in under one second.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Ian Kent <raven@themaw.net>
|
||||
---
|
||||
CHANGELOG | 1 +
|
||||
lib/rpc_subs.c | 4 ++--
|
||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/CHANGELOG b/CHANGELOG
|
||||
index 104fca90..313730b1 100644
|
||||
--- a/CHANGELOG
|
||||
+++ b/CHANGELOG
|
||||
@@ -10,6 +10,7 @@ xx/xx/2018 autofs-5.1.5
|
||||
- add error handling for ext_mount_add().
|
||||
- account for recent libnsl changes.
|
||||
- use_hostname_for_mounts shouldn't prevent selection among replicas.
|
||||
+- fix monotonic_elapsed.
|
||||
|
||||
19/12/2017 autofs-5.1.4
|
||||
- fix spec file url.
|
||||
diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
|
||||
index 73097c9d..60ede9f8 100644
|
||||
--- a/lib/rpc_subs.c
|
||||
+++ b/lib/rpc_subs.c
|
||||
@@ -1093,9 +1093,9 @@ double monotonic_elapsed(struct timespec start, struct timespec end)
|
||||
double t1, t2;
|
||||
|
||||
t1 = (double) start.tv_sec +
|
||||
- (double) (start.tv_nsec/(1000*1000*1000));
|
||||
+ ((double) start.tv_nsec/(1000*1000*1000));
|
||||
t2 = (double) end.tv_sec +
|
||||
- (double) (end.tv_nsec/(1000*1000*1000));
|
||||
+ ((double) end.tv_nsec/(1000*1000*1000));
|
||||
return t2 - t1;
|
||||
}
|
||||
|
@ -0,0 +1,226 @@
|
||||
autofs-5.1.4 - use_hostname_for_mounts shouldn't prevent selection among replicas
|
||||
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
|
||||
If several replicas have been specified for a mount point,
|
||||
and use_hostname_for_mount is set to "yes", the selection
|
||||
between these replicas is currently disabled and the last in
|
||||
the list is always chosen.
|
||||
|
||||
There is little point selecting between different addresses
|
||||
for the one host in this case, but it is still worth
|
||||
selecting between different hosts, particularly if different
|
||||
weights have been specified.
|
||||
|
||||
This patch restores the "prune_host_list()" functionality
|
||||
when use_hostname_for_mount is set, and modifies it slightly
|
||||
so that only on IP address for any host:/path entry in the
|
||||
config file is willl be successfully probed. After a
|
||||
success, further addresses from the same entry are skipped.
|
||||
This is achieved by tracking an entry number ("ent_num") for
|
||||
each 'struct host'.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
Signed-off-by: Ian Kent <raven@themaw.net>
|
||||
---
|
||||
CHANGELOG | 1 +
|
||||
include/replicated.h | 3 ++-
|
||||
modules/mount_nfs.c | 2 +-
|
||||
modules/replicated.c | 35 ++++++++++++++++++++---------------
|
||||
4 files changed, 24 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/CHANGELOG b/CHANGELOG
|
||||
index 2d5d5b1f..104fca90 100644
|
||||
--- a/CHANGELOG
|
||||
+++ b/CHANGELOG
|
||||
@@ -9,6 +9,7 @@ xx/xx/2018 autofs-5.1.5
|
||||
- fix error return in do_nfs_mount().
|
||||
- add error handling for ext_mount_add().
|
||||
- account for recent libnsl changes.
|
||||
+- use_hostname_for_mounts shouldn't prevent selection among replicas.
|
||||
|
||||
19/12/2017 autofs-5.1.4
|
||||
- fix spec file url.
|
||||
diff --git a/include/replicated.h b/include/replicated.h
|
||||
index 69ab7800..0f482d21 100644
|
||||
--- a/include/replicated.h
|
||||
+++ b/include/replicated.h
|
||||
@@ -57,6 +57,7 @@
|
||||
|
||||
struct host {
|
||||
char *name;
|
||||
+ int ent_num;
|
||||
struct sockaddr *addr;
|
||||
size_t addr_len;
|
||||
unsigned int rr;
|
||||
@@ -70,7 +71,7 @@ struct host {
|
||||
};
|
||||
|
||||
void seed_random(void);
|
||||
-struct host *new_host(const char *, struct sockaddr *, size_t,
|
||||
+struct host *new_host(const char *, int, struct sockaddr *, size_t,
|
||||
unsigned int, unsigned int, unsigned int);
|
||||
void free_host_list(struct host **);
|
||||
int parse_location(unsigned, struct host **, const char *, unsigned int);
|
||||
diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
|
||||
index 77166544..4cf0cd27 100644
|
||||
--- a/modules/mount_nfs.c
|
||||
+++ b/modules/mount_nfs.c
|
||||
@@ -236,7 +236,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
|
||||
(vers & NFS4_VERS_MASK) != 0 &&
|
||||
!(vers & UDP6_REQUESTED)) {
|
||||
unsigned int v4_probe_ok = 0;
|
||||
- struct host *tmp = new_host(hosts->name,
|
||||
+ struct host *tmp = new_host(hosts->name, 0,
|
||||
hosts->addr, hosts->addr_len,
|
||||
hosts->proximity,
|
||||
hosts->weight, hosts->options);
|
||||
diff --git a/modules/replicated.c b/modules/replicated.c
|
||||
index 3ac4c70f..f7b83236 100644
|
||||
--- a/modules/replicated.c
|
||||
+++ b/modules/replicated.c
|
||||
@@ -83,7 +83,7 @@ void seed_random(void)
|
||||
return;
|
||||
}
|
||||
|
||||
-struct host *new_host(const char *name,
|
||||
+struct host *new_host(const char *name, int ent_num,
|
||||
struct sockaddr *addr, size_t addr_len,
|
||||
unsigned int proximity, unsigned int weight,
|
||||
unsigned int options)
|
||||
@@ -116,6 +116,7 @@ struct host *new_host(const char *name,
|
||||
memset(new, 0, sizeof(struct host));
|
||||
|
||||
new->name = tmp1;
|
||||
+ new->ent_num = ent_num;
|
||||
new->addr_len = addr_len;
|
||||
new->addr = tmp2;
|
||||
new->proximity = proximity;
|
||||
@@ -714,7 +715,7 @@ done:
|
||||
int prune_host_list(unsigned logopt, struct host **list,
|
||||
unsigned int vers, int port)
|
||||
{
|
||||
- struct host *this, *last, *first;
|
||||
+ struct host *this, *last, *first, *prev;
|
||||
struct host *new = NULL;
|
||||
unsigned int proximity, selected_version = 0;
|
||||
unsigned int v2_tcp_count, v3_tcp_count, v4_tcp_count;
|
||||
@@ -726,12 +727,6 @@ int prune_host_list(unsigned logopt, struct host **list,
|
||||
if (!*list)
|
||||
return 0;
|
||||
|
||||
- /* If we're using the host name then there's no point probing
|
||||
- * avialability and respose time.
|
||||
- */
|
||||
- if (defaults_use_hostname_for_mounts())
|
||||
- return 1;
|
||||
-
|
||||
/* Use closest hosts to choose NFS version */
|
||||
|
||||
first = *list;
|
||||
@@ -877,11 +872,18 @@ int prune_host_list(unsigned logopt, struct host **list,
|
||||
|
||||
first = last;
|
||||
this = first;
|
||||
+ prev = NULL;
|
||||
while (this) {
|
||||
struct host *next = this->next;
|
||||
if (!this->name) {
|
||||
remove_host(list, this);
|
||||
add_host(&new, this);
|
||||
+ } else if (defaults_use_hostname_for_mounts() && prev &&
|
||||
+ prev->ent_num == this->ent_num) {
|
||||
+ /* When we use the hostname to mount, there is no
|
||||
+ * point in probing every address it has, just one is
|
||||
+ * enough. Skip the rest.
|
||||
+ */
|
||||
} else {
|
||||
status = get_supported_ver_and_cost(logopt, this,
|
||||
selected_version, port);
|
||||
@@ -889,6 +891,7 @@ int prune_host_list(unsigned logopt, struct host **list,
|
||||
this->version = selected_version;
|
||||
remove_host(list, this);
|
||||
add_host(&new, this);
|
||||
+ prev = this;
|
||||
}
|
||||
}
|
||||
this = next;
|
||||
@@ -901,7 +904,7 @@ int prune_host_list(unsigned logopt, struct host **list,
|
||||
}
|
||||
|
||||
static int add_new_host(struct host **list,
|
||||
- const char *host, unsigned int weight,
|
||||
+ const char *host, int ent_num, unsigned int weight,
|
||||
struct addrinfo *host_addr,
|
||||
unsigned int rr, unsigned int options)
|
||||
{
|
||||
@@ -940,7 +943,7 @@ static int add_new_host(struct host **list,
|
||||
else
|
||||
return 0;
|
||||
|
||||
- new = new_host(host, host_addr->ai_addr, addr_len, prx, weight, options);
|
||||
+ new = new_host(host, ent_num, host_addr->ai_addr, addr_len, prx, weight, options);
|
||||
if (!new)
|
||||
return 0;
|
||||
|
||||
@@ -953,7 +956,7 @@ static int add_new_host(struct host **list,
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static int add_host_addrs(struct host **list, const char *host,
|
||||
+static int add_host_addrs(struct host **list, const char *host, int ent_num,
|
||||
unsigned int weight, unsigned int options)
|
||||
{
|
||||
struct addrinfo hints, *ni, *this;
|
||||
@@ -988,7 +991,7 @@ static int add_host_addrs(struct host **list, const char *host,
|
||||
|
||||
this = ni;
|
||||
while (this) {
|
||||
- ret = add_new_host(list, host, weight, this, 0, options);
|
||||
+ ret = add_new_host(list, host, ent_num, weight, this, 0, options);
|
||||
if (!ret)
|
||||
break;
|
||||
this = this->ai_next;
|
||||
@@ -1027,7 +1030,7 @@ try_name:
|
||||
rr++;
|
||||
this = ni;
|
||||
while (this) {
|
||||
- ret = add_new_host(list, host, weight, this, rr, options);
|
||||
+ ret = add_new_host(list, host, ent_num, weight, this, rr, options);
|
||||
if (!ret)
|
||||
break;
|
||||
this = this->ai_next;
|
||||
@@ -1120,6 +1123,7 @@ int parse_location(unsigned logopt, struct host **hosts,
|
||||
{
|
||||
char *str, *p, *delim;
|
||||
unsigned int empty = 1;
|
||||
+ int ent_num = 1;
|
||||
|
||||
if (!list)
|
||||
return 0;
|
||||
@@ -1177,7 +1181,7 @@ int parse_location(unsigned logopt, struct host **hosts,
|
||||
}
|
||||
|
||||
if (p != delim) {
|
||||
- if (!add_host_addrs(hosts, p, weight, options)) {
|
||||
+ if (!add_host_addrs(hosts, p, ent_num, weight, options)) {
|
||||
if (empty) {
|
||||
p = next;
|
||||
continue;
|
||||
@@ -1199,7 +1203,7 @@ int parse_location(unsigned logopt, struct host **hosts,
|
||||
*delim = '\0';
|
||||
next = delim + 1;
|
||||
|
||||
- if (!add_host_addrs(hosts, p, weight, options)) {
|
||||
+ if (!add_host_addrs(hosts, p, ent_num, weight, options)) {
|
||||
p = next;
|
||||
continue;
|
||||
}
|
||||
@@ -1213,6 +1217,7 @@ int parse_location(unsigned logopt, struct host **hosts,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ ent_num++;
|
||||
p = next;
|
||||
}
|
||||
|
15
autofs.spec
15
autofs.spec
@ -23,6 +23,9 @@ Patch7: autofs-5.1.4-fix-sublink-option-not-set-from-defaults.patch
|
||||
Patch8: autofs-5.1.4-fix-error-return-in-do_nfs_mount.patch
|
||||
Patch9: autofs-5.1.4-add-error-handling-for-ext_mount_add.patch
|
||||
Patch10: autofs-5.1.4-account-for-libnsl-changes.patch
|
||||
Patch11: autofs-5.1.4-use_hostname_for_mounts-shouldnt-prevent-selection-among-replicas.patch
|
||||
Patch12: autofs-5.1.4-fix-monotonic_elapsed.patch
|
||||
Patch13: autofs-5.1.4-Makefiles.rules-remove-samples-from-SUBDIRS.patch
|
||||
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
@ -94,6 +97,9 @@ echo %{version}-%{release} > .version
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
|
||||
%build
|
||||
LDFLAGS=-Wl,-z,now
|
||||
@ -129,6 +135,12 @@ install -m 755 redhat/autofs.init $RPM_BUILD_ROOT%{_initrddir}/autofs
|
||||
install -m 644 redhat/autofs.conf $RPM_BUILD_ROOT/etc/autofs.conf
|
||||
install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
|
||||
|
||||
install -m 644 samples/auto.master $RPM_BUILD_ROOT/etc/auto.master
|
||||
install -m 644 samples/auto.misc $RPM_BUILD_ROOT/etc/auto.misc
|
||||
install -m 644 samples/auto.net $RPM_BUILD_ROOT/etc/auto.net
|
||||
install -m 644 samples/auto.smb $RPM_BUILD_ROOT/etc/auto.smb
|
||||
install -m 600 samples/autofs_ldap_auth.conf $RPM_BUILD_ROOT/etc/autofs_ldap_auth.conf
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
@ -190,6 +202,9 @@ fi
|
||||
* Mon Feb 5 2018 Ian Kent <ikent@redhat.com> - 1:5.1.4-7
|
||||
- add error handling for ext_mount_add().
|
||||
- account for recent libnsl changes.
|
||||
- use_hostname_for_mounts shouldn't prevent selection among replicas.
|
||||
- fix monotonic_elapse.
|
||||
- Makefiles.rules: remove 'samples' from SUBDIRS.
|
||||
|
||||
* Thu Feb 1 2018 Ian Kent <ikent@redhat.com> - 1:5.1.4-6
|
||||
- dont use array for path when not necessary.
|
||||
|
Loading…
Reference in New Issue
Block a user