Blame SOURCES/autofs-5.1.3-reset-master-map-list-on-startup-retry.patch

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