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

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