parent
65ea670271
commit
c6d6dc4027
@ -0,0 +1,68 @@
|
||||
autofs-5.1.9 - fix deadlock in remount
|
||||
|
||||
From: Ian Kent <raven@themaw.net>
|
||||
|
||||
If we're starting up or trying to re-connect to an existing direct mount
|
||||
we could be iterating through the map entries with the cache readlock
|
||||
held so we can't just take the writelock for direct mounts. But when
|
||||
trying to re-connect to an existing mount at startup there won't be any
|
||||
other process updating the map entry cache.
|
||||
|
||||
Signed-off-by: Ian Kent <raven@themaw.net>
|
||||
---
|
||||
CHANGELOG | 1 +
|
||||
modules/parse_sun.c | 26 ++++++++++++++++++++++++--
|
||||
2 files changed, 25 insertions(+), 2 deletions(-)
|
||||
|
||||
--- autofs-5.1.4.orig/CHANGELOG
|
||||
+++ autofs-5.1.4/CHANGELOG
|
||||
@@ -151,6 +151,7 @@
|
||||
- fix incorrect matching of cached wildcard key.
|
||||
- fix expire retry looping.
|
||||
- fix get parent multi-mount check in try_remount().
|
||||
+- fix deadlock in remount.
|
||||
|
||||
xx/xx/2018 autofs-5.1.5
|
||||
- fix flag file permission.
|
||||
--- autofs-5.1.4.orig/modules/parse_sun.c
|
||||
+++ autofs-5.1.4/modules/parse_sun.c
|
||||
@@ -881,7 +881,18 @@ update_offset_entry(struct autofs_point
|
||||
strcpy(m_mapent, loc);
|
||||
}
|
||||
|
||||
- cache_writelock(mc);
|
||||
+ /*
|
||||
+ * If we're starting up or trying to re-connect to an existing
|
||||
+ * direct mount we could be iterating through the map entries
|
||||
+ * with the readlock held so we can't just take the writelock
|
||||
+ * for direct mounts. But at when trying to re-connect to an
|
||||
+ * existing mount at startup there won't be any other process
|
||||
+ * updating the map entry cache.
|
||||
+ */
|
||||
+ if (ap->state == ST_INIT && ap->flags & MOUNT_FLAG_REMOUNT)
|
||||
+ cache_readlock(mc);
|
||||
+ else
|
||||
+ cache_writelock(mc);
|
||||
ret = cache_update_offset(mc, name, m_key, m_mapent, age);
|
||||
|
||||
me = cache_lookup_distinct(mc, m_key);
|
||||
@@ -1573,7 +1584,18 @@ dont_expand:
|
||||
free(myoptions);
|
||||
} while (*p == '/' || (*p == '"' && *(p + 1) == '/'));
|
||||
|
||||
- cache_writelock(mc);
|
||||
+ /*
|
||||
+ * If we're starting up or trying to re-connect to an existing
|
||||
+ * direct mount we could be iterating through the map entries
|
||||
+ * with the readlock held so we can't just take the writelock
|
||||
+ * for direct mounts. But at when trying to re-connect to an
|
||||
+ * existing mount at startup there won't be any other process
|
||||
+ * updating the map entry cache.
|
||||
+ */
|
||||
+ if (ap->state == ST_INIT && ap->flags & MOUNT_FLAG_REMOUNT)
|
||||
+ cache_readlock(mc);
|
||||
+ else
|
||||
+ cache_writelock(mc);
|
||||
me = cache_lookup_distinct(mc, name);
|
||||
if (!me) {
|
||||
cache_unlock(mc);
|
@ -0,0 +1,43 @@
|
||||
autofs-5.1.9 - fix get parent multi-mount check in try_remount()
|
||||
|
||||
From: Ian Kent <raven@themaw.net>
|
||||
|
||||
In commit 635b90ecc (autofs-5.1.8 - fix mount tree startup reconnect)
|
||||
when getting the parent the check for a multi-mount should include a
|
||||
check for the root of the multi-mount as well since the root does not
|
||||
set its parent (it remains NULL).
|
||||
|
||||
We could set the root parent to itself but that may have side effects
|
||||
because the convention has always been the parent is NULL for the
|
||||
multi-mount root.
|
||||
|
||||
Reported-by: Roberto Bergantinos Corpas <rbergant@redhat.com>
|
||||
Suggested-by: Roberto Bergantinos Corpas <rbergant@redhat.com>
|
||||
|
||||
Signed-off-by: Ian Kent <raven@themaw.net>
|
||||
---
|
||||
CHANGELOG | 1 +
|
||||
lib/mounts.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
--- autofs-5.1.4.orig/CHANGELOG
|
||||
+++ autofs-5.1.4/CHANGELOG
|
||||
@@ -150,6 +150,7 @@
|
||||
- fix some sss error return cases.
|
||||
- fix incorrect matching of cached wildcard key.
|
||||
- fix expire retry looping.
|
||||
+- fix get parent multi-mount check in try_remount().
|
||||
|
||||
xx/xx/2018 autofs-5.1.5
|
||||
- fix flag file permission.
|
||||
--- autofs-5.1.4.orig/lib/mounts.c
|
||||
+++ autofs-5.1.4/lib/mounts.c
|
||||
@@ -2878,7 +2878,7 @@ int try_remount(struct autofs_point *ap,
|
||||
}
|
||||
|
||||
me->flags &= ~MOUNT_FLAG_DIR_CREATED;
|
||||
- mapent = IS_MM(me) ? MM_PARENT(me) : me;
|
||||
+ mapent = IS_MM(me) && !IS_MM_ROOT(me) ? MM_PARENT(me) : me;
|
||||
/* Direct or offset mount, key is full path */
|
||||
if (mapent->key[0] == '/') {
|
||||
if (!is_mounted(mapent->key, MNTS_REAL))
|
Loading…
Reference in new issue