|
|
4d476f |
autofs-5.1.3 - reset master map list on startup retry
|
|
|
4d476f |
|
|
|
4d476f |
From: Ian Kent <raven@themaw.net>
|
|
|
4d476f |
|
|
|
4d476f |
On autofs startup if automount thinks the master map read failed
|
|
|
4d476f |
for some reason it retries the read after waiting for a fairly
|
|
|
4d476f |
short delay.
|
|
|
4d476f |
|
|
|
4d476f |
It should be ok to retry with the entries seen so far but there
|
|
|
4d476f |
may be cases where that causes problems so release any existing
|
|
|
4d476f |
master map entries before retrying.
|
|
|
4d476f |
|
|
|
4d476f |
Signed-off-by: Ian Kent <raven@themaw.net>
|
|
|
4d476f |
---
|
|
|
4d476f |
CHANGELOG | 1 +
|
|
|
4d476f |
daemon/automount.c | 25 +++++++++++++++++++++++++
|
|
|
4d476f |
2 files changed, 26 insertions(+)
|
|
|
4d476f |
|
|
|
4d476f |
--- autofs-5.0.7.orig/CHANGELOG
|
|
|
4d476f |
+++ autofs-5.0.7/CHANGELOG
|
|
|
4d476f |
@@ -254,6 +254,7 @@
|
|
|
4d476f |
- revert fix argc off by one in mount_autofs.c.
|
|
|
4d476f |
- allow dot in OPTIONSTR value lexer pattern.
|
|
|
4d476f |
- handle additional nfs versions in mount_nfs.c.
|
|
|
4d476f |
+- reset master map list on startup retry.
|
|
|
4d476f |
|
|
|
4d476f |
25/07/2012 autofs-5.0.7
|
|
|
4d476f |
=======================
|
|
|
4d476f |
--- autofs-5.0.7.orig/daemon/automount.c
|
|
|
4d476f |
+++ autofs-5.0.7/daemon/automount.c
|
|
|
4d476f |
@@ -2099,6 +2099,27 @@ static void remove_empty_args(char **arg
|
|
|
4d476f |
*argc = j;
|
|
|
4d476f |
}
|
|
|
4d476f |
|
|
|
4d476f |
+static void do_master_list_reset(struct master *master)
|
|
|
4d476f |
+{
|
|
|
4d476f |
+ struct list_head *head, *p;
|
|
|
4d476f |
+
|
|
|
4d476f |
+ master_mutex_lock();
|
|
|
4d476f |
+
|
|
|
4d476f |
+ head = &master->mounts;
|
|
|
4d476f |
+ list_for_each(p, head) {
|
|
|
4d476f |
+ struct master_mapent *entry;
|
|
|
4d476f |
+
|
|
|
4d476f |
+ entry = list_entry(p, struct master_mapent, list);
|
|
|
4d476f |
+
|
|
|
4d476f |
+ if (!list_empty(&entry->list))
|
|
|
4d476f |
+ list_del(&entry->list);
|
|
|
4d476f |
+ master_free_mapent_sources(entry, 1);
|
|
|
4d476f |
+ master_free_mapent(entry);
|
|
|
4d476f |
+ }
|
|
|
4d476f |
+
|
|
|
4d476f |
+ master_mutex_unlock();
|
|
|
4d476f |
+}
|
|
|
4d476f |
+
|
|
|
4d476f |
static int do_master_read_master(struct master *master, int wait)
|
|
|
4d476f |
{
|
|
|
4d476f |
sigset_t signalset;
|
|
|
4d476f |
@@ -2118,6 +2139,8 @@ static int do_master_read_master(struct
|
|
|
4d476f |
while (1) {
|
|
|
4d476f |
struct timespec t = { retry_wait, 0 };
|
|
|
4d476f |
|
|
|
4d476f |
+ do_master_list_reset(master);
|
|
|
4d476f |
+
|
|
|
4d476f |
age = time(NULL);
|
|
|
4d476f |
if (master_read_master(master, age, 0)) {
|
|
|
4d476f |
ret = 1;
|
|
|
4d476f |
@@ -2586,6 +2609,8 @@ int main(int argc, char *argv[])
|
|
|
4d476f |
* Failed to read master map, continue with what
|
|
|
4d476f |
* we have anyway.
|
|
|
4d476f |
*/
|
|
|
4d476f |
+ do_master_list_reset(master_list);
|
|
|
4d476f |
+ age = time(NULL);
|
|
|
4d476f |
master_read_master(master_list, age, 1);
|
|
|
4d476f |
}
|
|
|
4d476f |
}
|