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
68 lines
1.7 KiB
7 years ago
|
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;
|