Blame SOURCES/autofs-5.1.7-use-mapent-tree-root-for-tree_mapent_add_node.patch

9a499a
autofs-5.1.7 - use mapent tree root for tree_mapent_add_node()
9a499a
9a499a
From: Ian Kent <raven@themaw.net>
9a499a
9a499a
Since we need to create the offset tree after adding the offset entries
9a499a
to the mapent cache lookup the root mapent once and use it when calling
9a499a
tree_mapent_add_node() instread of doing a cache lookup on every node
9a499a
addition.
9a499a
9a499a
Signed-off-by: Ian Kent <raven@themaw.net>
9a499a
---
9a499a
 CHANGELOG           |    1 +
9a499a
 include/mounts.h    |    2 +-
9a499a
 lib/mounts.c        |   24 +++++-------------------
9a499a
 modules/parse_sun.c |   11 ++++++++++-
9a499a
 4 files changed, 17 insertions(+), 21 deletions(-)
9a499a
9a499a
--- autofs-5.1.4.orig/CHANGELOG
9a499a
+++ autofs-5.1.4/CHANGELOG
9a499a
@@ -69,6 +69,7 @@
9a499a
 - fix amd section mounts map reload.
9a499a
 - fix amd hosts mount expire.
9a499a
 - fix offset entries order.
9a499a
+- use mapent tree root for tree_mapent_add_node().
9a499a
 
9a499a
 xx/xx/2018 autofs-5.1.5
9a499a
 - fix flag file permission.
9a499a
--- autofs-5.1.4.orig/include/mounts.h
9a499a
+++ autofs-5.1.4/include/mounts.h
9a499a
@@ -170,7 +170,7 @@ void mnts_get_expire_list(struct list_he
9a499a
 void mnts_put_expire_list(struct list_head *mnts);
9a499a
 void mnts_set_mounted_mount(struct autofs_point *ap, const char *name, unsigned int flags);
9a499a
 struct tree_node *tree_mapent_root(struct mapent *me);
9a499a
-int tree_mapent_add_node(struct mapent_cache *mc, const char *base, const char *key);
9a499a
+int tree_mapent_add_node(struct mapent_cache *mc, struct tree_node *root, const char *key);
9a499a
 int tree_mapent_delete_offsets(struct mapent_cache *mc, const char *key);
9a499a
 void tree_mapent_cleanup_offsets(struct mapent *oe);
9a499a
 int tree_mapent_mount_offsets(struct mapent *oe, int nonstrict);
9a499a
--- autofs-5.1.4.orig/lib/mounts.c
9a499a
+++ autofs-5.1.4/lib/mounts.c
9a499a
@@ -1519,27 +1519,13 @@ static void tree_mapent_free(struct tree
9a499a
 }
9a499a
 
9a499a
 int tree_mapent_add_node(struct mapent_cache *mc,
9a499a
-			 const char *root, const char *key)
9a499a
+			 struct tree_node *root, const char *key)
9a499a
 {
9a499a
 	unsigned int logopt = mc->ap->logopt;
9a499a
-	struct tree_node *tree, *n;
9a499a
-	struct mapent *base;
9a499a
+	struct tree_node *n;
9a499a
 	struct mapent *parent;
9a499a
 	struct mapent *me;
9a499a
 
9a499a
-	base = cache_lookup_distinct(mc, root);
9a499a
-	if (!base) {
9a499a
-		error(logopt,
9a499a
-		     "failed to find multi-mount root for key %s", key);
9a499a
-		return 0;
9a499a
-	}
9a499a
-
9a499a
-	if (MAPENT_ROOT(base) != MAPENT_NODE(base)) {
9a499a
-		error(logopt, "key %s is not multi-mount root", root);
9a499a
-		return 0;
9a499a
-	}
9a499a
-	tree = MAPENT_ROOT(base);
9a499a
-
9a499a
 	me = cache_lookup_distinct(mc, key);
9a499a
 	if (!me) {
9a499a
 		error(logopt,
9a499a
@@ -1547,16 +1533,16 @@ int tree_mapent_add_node(struct mapent_c
9a499a
 		return 0;
9a499a
 	}
9a499a
 
9a499a
-	n = tree_add_node(tree, me);
9a499a
+	n = tree_add_node(root, me);
9a499a
 	if (!n)
9a499a
 		return 0;
9a499a
 
9a499a
-	MAPENT_SET_ROOT(me, tree)
9a499a
+	MAPENT_SET_ROOT(me, root)
9a499a
 
9a499a
 	/* Set the subtree parent */
9a499a
 	parent = cache_get_offset_parent(mc, key);
9a499a
 	if (!parent)
9a499a
-		MAPENT_SET_PARENT(me, tree)
9a499a
+		MAPENT_SET_PARENT(me, root)
9a499a
 	else
9a499a
 		MAPENT_SET_PARENT(me, MAPENT_NODE(parent))
9a499a
 
9a499a
--- autofs-5.1.4.orig/modules/parse_sun.c
9a499a
+++ autofs-5.1.4/modules/parse_sun.c
9a499a
@@ -1538,8 +1538,17 @@ dont_expand:
9a499a
 		} while (*p == '/' || (*p == '"' && *(p + 1) == '/'));
9a499a
 
9a499a
 		cache_writelock(mc);
9a499a
+		me = cache_lookup_distinct(mc, name);
9a499a
+		if (!me) {
9a499a
+			cache_unlock(mc);
9a499a
+			free(options);
9a499a
+			free(pmapent);
9a499a
+			cleanup_offset_entries(ap, mc, &offsets);
9a499a
+			pthread_setcancelstate(cur_state, NULL);
9a499a
+			return 1;
9a499a
+		}
9a499a
 		list_for_each_entry_safe(oe, tmp, &offsets, work) {
9a499a
-			if (!tree_mapent_add_node(mc, name, oe->key))
9a499a
+			if (!tree_mapent_add_node(mc, MAPENT_ROOT(me), oe->key))
9a499a
 				error(ap->logopt, "failed to add offset %s to tree", oe->key);
9a499a
 			list_del_init(&oe->work);
9a499a
 		}