- 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
|
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
|
Patch9: autofs-5.1.4-add-error-handling-for-ext_mount_add.patch
|
||||||
Patch10: autofs-5.1.4-account-for-libnsl-changes.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)
|
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
|
||||||
@ -94,6 +97,9 @@ echo %{version}-%{release} > .version
|
|||||||
%patch8 -p1
|
%patch8 -p1
|
||||||
%patch9 -p1
|
%patch9 -p1
|
||||||
%patch10 -p1
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
LDFLAGS=-Wl,-z,now
|
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.conf $RPM_BUILD_ROOT/etc/autofs.conf
|
||||||
install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
|
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
|
%clean
|
||||||
rm -rf $RPM_BUILD_ROOT
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
@ -190,6 +202,9 @@ fi
|
|||||||
* Mon Feb 5 2018 Ian Kent <ikent@redhat.com> - 1:5.1.4-7
|
* Mon Feb 5 2018 Ian Kent <ikent@redhat.com> - 1:5.1.4-7
|
||||||
- add error handling for ext_mount_add().
|
- add error handling for ext_mount_add().
|
||||||
- account for recent libnsl changes.
|
- 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
|
* Thu Feb 1 2018 Ian Kent <ikent@redhat.com> - 1:5.1.4-6
|
||||||
- dont use array for path when not necessary.
|
- dont use array for path when not necessary.
|
||||||
|
Loading…
Reference in New Issue
Block a user