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.

68 lines
1.7 KiB

autofs-5.0.9 - amd lookup fix expire of amd nfs mounts
From: Ian Kent <raven@themaw.net>
Becuase of the way map entries are matched for amd maps there
might not be an entry in the map entry cache for mounts. This
was causing mounts to not expire.
---
daemon/automount.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/daemon/automount.c b/daemon/automount.c
index 0ba3580..9d9ba7b 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -462,7 +462,7 @@ static int umount_subtree_mounts(struct autofs_point *ap, const char *path, unsi
{
struct mapent_cache *mc;
struct mapent *me;
- unsigned int is_mm_root;
+ unsigned int is_mm_root = 0;
int left;
me = lookup_source_mapent(ap, path, LKP_DISTINCT);
@@ -474,22 +474,22 @@ static int umount_subtree_mounts(struct autofs_point *ap, const char *path, unsi
ind_key++;
me = lookup_source_mapent(ap, ind_key, LKP_NORMAL);
- if (!me)
- return 0;
}
- mc = me->mc;
- is_mm_root = (me->multi == me);
+ if (me) {
+ mc = me->mc;
+ is_mm_root = (me->multi == me);
+ }
left = 0;
- pthread_cleanup_push(cache_lock_cleanup, mc);
-
- if (me->multi) {
+ if (me && me->multi) {
char root[PATH_MAX];
char *base;
int cur_state;
+ pthread_cleanup_push(cache_lock_cleanup, mc);
+
if (!strchr(me->multi->key, '/'))
/* Indirect multi-mount root */
/* sprintf okay - if it's mounted, it's
@@ -516,9 +516,11 @@ static int umount_subtree_mounts(struct autofs_point *ap, const char *path, unsi
(ap->entry->maps->flags & MAP_FLAG_FORMAT_AMD))
cache_pop_mapent(me);
pthread_setcancelstate(cur_state, NULL);
+ pthread_cleanup_pop(0);
}
- pthread_cleanup_pop(1);
+ if (me)
+ cache_unlock(mc);
if (left || is_autofs_fs)
return left;