autofs-5.0.7 - fix submount tree not all expiring From: Ian Kent Due to the change in the expire-specific-submount-only patch, sub-mounts within an indirect mount that follow a submount (in the check order) won't be expired if that submount is busy. --- CHANGELOG | 1 + lib/master.c | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f1ec1e5..4106e7f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -39,6 +39,7 @@ - document browse option in man page. - fix some automount(8) typos. - syncronize handle_mounts() shutdown. +- fix submount tree not all expiring. 25/07/2012 autofs-5.0.7 ======================= diff --git a/lib/master.c b/lib/master.c index a0e62f2..64dbcb1 100644 --- a/lib/master.c +++ b/lib/master.c @@ -905,15 +905,24 @@ int master_notify_submount(struct autofs_point *ap, const char *path, enum state this = list_entry(p, struct autofs_point, mounts); p = p->prev; - if (!master_submount_list_empty(this)) { - mounts_mutex_unlock(ap); - return master_notify_submount(this, path, state); - } - /* path not the same */ if (strcmp(this->path, path)) continue; + if (!master_submount_list_empty(this)) { + char *this_path = strdup(this->path); + if (this_path) { + mounts_mutex_unlock(ap); + master_notify_submount(this, path, state); + mounts_mutex_lock(ap); + if (!__master_find_submount(ap, this_path)) { + free(this_path); + continue; + } + free(this_path); + } + } + /* Now we have found the submount we want to expire */ st_mutex_lock(); @@ -959,10 +968,7 @@ int master_notify_submount(struct autofs_point *ap, const char *path, enum state st_mutex_lock(); } st_mutex_unlock(); - mounts_mutex_unlock(ap); - - return ret; - + break; } mounts_mutex_unlock(ap);