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

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
 	}