You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
7 years ago
|
autofs-5.1.0 - fix hosts map update on reload
|
||
|
|
||
|
From: Ian Kent <ikent@redhat.com>
|
||
|
|
||
|
Commit aedfd5aa - "amd lookup fix host mount naming" introduced a
|
||
|
regression when updating sun format maps.
|
||
|
|
||
|
The amd host mount type assumes the lookup name is the host name for
|
||
|
the host mount but amd uses ${rhost} for this.
|
||
|
|
||
|
This introduces the possibility of multiple concurrent mount requests
|
||
|
since constructing a mount tree that isn't under the lookup name can't
|
||
|
take advantage of the kernel queuing of other concurrent lookups while
|
||
|
the mount tree is constructed.
|
||
|
|
||
|
Consequently multi-mount updates (currently only done for the internal
|
||
|
hosts map which the amd parser also uses for its hosts map) can't be
|
||
|
allowed for amd mounts.
|
||
|
---
|
||
|
CHANGELOG | 1 +
|
||
|
modules/parse_sun.c | 37 ++++++++++++++++++++++++++++---------
|
||
|
2 files changed, 29 insertions(+), 9 deletions(-)
|
||
|
|
||
|
--- autofs-5.0.7.orig/CHANGELOG
|
||
|
+++ autofs-5.0.7/CHANGELOG
|
||
|
@@ -158,6 +158,7 @@
|
||
|
- update man page autofs(8) for systemd.
|
||
|
- fix fix master map type check.
|
||
|
- fix typo in update_hosts_mounts().
|
||
|
+- fix hosts map update on reload.
|
||
|
|
||
|
25/07/2012 autofs-5.0.7
|
||
|
=======================
|
||
|
--- autofs-5.0.7.orig/modules/parse_sun.c
|
||
|
+++ autofs-5.0.7/modules/parse_sun.c
|
||
|
@@ -1356,16 +1356,35 @@ int parse_mount(struct autofs_point *ap,
|
||
|
}
|
||
|
|
||
|
cache_multi_writelock(me);
|
||
|
- /* Someone beat us to it, return success */
|
||
|
- if (me->multi) {
|
||
|
- free(options);
|
||
|
- cache_multi_unlock(me);
|
||
|
- cache_unlock(mc);
|
||
|
- pthread_setcancelstate(cur_state, NULL);
|
||
|
- return 0;
|
||
|
- }
|
||
|
/* So we know we're the multi-mount root */
|
||
|
- me->multi = me;
|
||
|
+ if (!me->multi)
|
||
|
+ me->multi = me;
|
||
|
+ else {
|
||
|
+ /*
|
||
|
+ * The amd host mount type assumes the lookup name
|
||
|
+ * is the host name for the host mount but amd uses
|
||
|
+ * ${rhost} for this.
|
||
|
+ *
|
||
|
+ * This introduces the possibility of multiple
|
||
|
+ * concurrent mount requests since constructing a
|
||
|
+ * mount tree that isn't under the lookup name can't
|
||
|
+ * take advantage of the kernel queuing of other
|
||
|
+ * concurrent lookups while the mount tree is
|
||
|
+ * constructed.
|
||
|
+ *
|
||
|
+ * Consequently multi-mount updates (currently only
|
||
|
+ * done for the internal hosts map which the amd
|
||
|
+ * parser also uses for its hosts map) can't be
|
||
|
+ * allowed for amd mounts.
|
||
|
+ */
|
||
|
+ if (source->flags & MAP_FLAG_FORMAT_AMD) {
|
||
|
+ free(options);
|
||
|
+ cache_multi_unlock(me);
|
||
|
+ cache_unlock(mc);
|
||
|
+ pthread_setcancelstate(cur_state, NULL);
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+ }
|
||
|
|
||
|
age = me->age;
|
||
|
|