Ian Kent cc58c1
autofs-5.0.6 - allow update of multi mount offset entries
Ian Kent cc58c1
Ian Kent cc58c1
From: Ian Kent <ikent@redhat.com>
Ian Kent cc58c1
Ian Kent cc58c1
Currently multi mount offsets can only be added or all offsets owned by
Ian Kent cc58c1
an entry deleted at once. In order to be able to update multi mount map
Ian Kent cc58c1
entries we need to be able to update offset entries of an already expanded
Ian Kent cc58c1
multi map cache entry.
Ian Kent cc58c1
---
Ian Kent cc58c1
Ian Kent cc58c1
 include/automount.h |    2 +-
Ian Kent cc58c1
 lib/cache.c         |    4 ++--
Ian Kent cc58c1
 modules/parse_sun.c |   20 ++++++++++----------
Ian Kent cc58c1
 3 files changed, 13 insertions(+), 13 deletions(-)
Ian Kent cc58c1
Ian Kent cc58c1
Ian Kent cc58c1
diff --git a/include/automount.h b/include/automount.h
Ian Kent cc58c1
index 40c1975..561fcc2 100644
Ian Kent cc58c1
--- a/include/automount.h
Ian Kent cc58c1
+++ b/include/automount.h
Ian Kent cc58c1
@@ -188,7 +188,7 @@ struct mapent *cache_lookup_distinct(struct mapent_cache *mc, const char *key);
Ian Kent cc58c1
 struct mapent *cache_lookup_offset(const char *prefix, const char *offset, int start, struct list_head *head);
Ian Kent cc58c1
 struct mapent *cache_partial_match(struct mapent_cache *mc, const char *prefix);
Ian Kent cc58c1
 int cache_add(struct mapent_cache *mc, struct map_source *ms, const char *key, const char *mapent, time_t age);
Ian Kent cc58c1
-int cache_add_offset(struct mapent_cache *mc, const char *mkey, const char *key, const char *mapent, time_t age);
Ian Kent cc58c1
+int cache_update_offset(struct mapent_cache *mc, const char *mkey, const char *key, const char *mapent, time_t age);
Ian Kent cc58c1
 int cache_set_parents(struct mapent *mm);
Ian Kent cc58c1
 int cache_update(struct mapent_cache *mc, struct map_source *ms, const char *key, const char *mapent, time_t age);
Ian Kent cc58c1
 int cache_delete(struct mapent_cache *mc, const char *key);
Ian Kent cc58c1
diff --git a/lib/cache.c b/lib/cache.c
Ian Kent cc58c1
index 1489273..9179ad5 100644
Ian Kent cc58c1
--- a/lib/cache.c
Ian Kent cc58c1
+++ b/lib/cache.c
Ian Kent cc58c1
@@ -647,7 +647,7 @@ static void cache_add_ordered_offset(struct mapent *me, struct list_head *head)
Ian Kent cc58c1
 }
Ian Kent cc58c1
 
Ian Kent cc58c1
 /* cache must be write locked by caller */
Ian Kent cc58c1
-int cache_add_offset(struct mapent_cache *mc, const char *mkey, const char *key, const char *mapent, time_t age)
Ian Kent cc58c1
+int cache_update_offset(struct mapent_cache *mc, const char *mkey, const char *key, const char *mapent, time_t age)
Ian Kent cc58c1
 {
Ian Kent cc58c1
 	unsigned logopt = mc->ap ? mc->ap->logopt : master_get_logopt();
Ian Kent cc58c1
 	struct mapent *me, *owner;
Ian Kent cc58c1
@@ -659,7 +659,7 @@ int cache_add_offset(struct mapent_cache *mc, const char *mkey, const char *key,
Ian Kent cc58c1
 
Ian Kent cc58c1
 	me = cache_lookup_distinct(mc, key);
Ian Kent cc58c1
 	if (me && me->age == age) {
Ian Kent cc58c1
-		if (me != owner)
Ian Kent cc58c1
+		if (me->multi != owner)
Ian Kent cc58c1
 			return CHE_DUPLICATE;
Ian Kent cc58c1
 	}
Ian Kent cc58c1
 
Ian Kent cc58c1
diff --git a/modules/parse_sun.c b/modules/parse_sun.c
Ian Kent cc58c1
index c4decbc..5be7345 100644
Ian Kent cc58c1
--- a/modules/parse_sun.c
Ian Kent cc58c1
+++ b/modules/parse_sun.c
Ian Kent cc58c1
@@ -781,10 +781,10 @@ static int check_is_multi(const char *mapent)
Ian Kent cc58c1
 }
Ian Kent cc58c1
 
Ian Kent cc58c1
 static int
Ian Kent cc58c1
-add_offset_entry(struct autofs_point *ap, const char *name,
Ian Kent cc58c1
-		 const char *m_root, int m_root_len,
Ian Kent cc58c1
-		 const char *path, const char *myoptions, const char *loc,
Ian Kent cc58c1
-		 time_t age)
Ian Kent cc58c1
+update_offset_entry(struct autofs_point *ap, const char *name,
Ian Kent cc58c1
+		    const char *m_root, int m_root_len,
Ian Kent cc58c1
+		    const char *path, const char *myoptions, const char *loc,
Ian Kent cc58c1
+		    time_t age)
Ian Kent cc58c1
 {
Ian Kent cc58c1
 	struct map_source *source;
Ian Kent cc58c1
 	struct mapent_cache *mc;
Ian Kent cc58c1
@@ -838,17 +838,17 @@ add_offset_entry(struct autofs_point *ap, const char *name,
Ian Kent cc58c1
 	} else
Ian Kent cc58c1
 		strcpy(m_mapent, loc);
Ian Kent cc58c1
 
Ian Kent cc58c1
-	ret = cache_add_offset(mc, name, m_key, m_mapent, age);
Ian Kent cc58c1
+	ret = cache_update_offset(mc, name, m_key, m_mapent, age);
Ian Kent cc58c1
 	if (ret == CHE_DUPLICATE)
Ian Kent cc58c1
 		warn(ap->logopt, MODPREFIX
Ian Kent cc58c1
 		     "syntax error or duplicate offset %s -> %s", path, loc);
Ian Kent cc58c1
 	else if (ret == CHE_FAIL)
Ian Kent cc58c1
 		debug(ap->logopt, MODPREFIX
Ian Kent cc58c1
-		      "failed to add multi-mount offset %s -> %s", path, m_mapent);
Ian Kent cc58c1
+		      "failed to update multi-mount offset %s -> %s", path, m_mapent);
Ian Kent cc58c1
 	else {
Ian Kent cc58c1
 		ret = CHE_OK;
Ian Kent cc58c1
 		debug(ap->logopt, MODPREFIX
Ian Kent cc58c1
-		      "added multi-mount offset %s -> %s", path, m_mapent);
Ian Kent cc58c1
+		      "updated multi-mount offset %s -> %s", path, m_mapent);
Ian Kent cc58c1
 	}
Ian Kent cc58c1
 
Ian Kent cc58c1
 	return ret;
Ian Kent cc58c1
@@ -1448,9 +1448,9 @@ int parse_mount(struct autofs_point *ap, const char *name,
Ian Kent cc58c1
 			master_source_current_wait(ap->entry);
Ian Kent cc58c1
 			ap->entry->current = source;
Ian Kent cc58c1
 
Ian Kent cc58c1
-			status = add_offset_entry(ap, name,
Ian Kent cc58c1
-						m_root, m_root_len,
Ian Kent cc58c1
-						path, myoptions, loc, age);
Ian Kent cc58c1
+			status = update_offset_entry(ap, name,
Ian Kent cc58c1
+						     m_root, m_root_len,
Ian Kent cc58c1
+						     path, myoptions, loc, age);
Ian Kent cc58c1
 
Ian Kent cc58c1
 			if (status != CHE_OK) {
Ian Kent cc58c1
 				warn(ap->logopt, MODPREFIX "error adding multi-mount");