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

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