|
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");
|