aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorIan Kent <raven@themaw.net>2019-06-07 10:48:51 +0800
committerIan Kent <raven@themaw.net>2020-12-06 08:28:15 +0800
commit759b1cc2e7da8305039dc51d4a5bb533b4da570b (patch)
tree8bbc11e61bcce22cfc1eddcc4881e02864314c09 /modules
parentdd45e4d1ddb47b9aeccc3405610a3ff2f6c850ae (diff)
downloadautofs-759b1cc2e7da8305039dc51d4a5bb533b4da570b.tar.gz
autofs-5.1.6 - use mnt_list for submounts
Use struct mnt_list objects for submount list entries instead of struct autofs_point itself. Signed-off-by: Ian Kent <raven@themaw.net>
Diffstat (limited to 'modules')
-rw-r--r--modules/mount_autofs.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/modules/mount_autofs.c b/modules/mount_autofs.c
index 72e1aba4..356bba8c 100644
--- a/modules/mount_autofs.c
+++ b/modules/mount_autofs.c
@@ -65,6 +65,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
struct master_mapent *entry;
struct map_source *source;
struct autofs_point *nap;
+ struct mnt_list *mnt;
char buf[MAX_ERR_BUF];
char *options, *p;
int len, ret;
@@ -307,6 +308,18 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
return 1;
}
+ mnt = mnts_add_submount(nap);
+ if (!mnt) {
+ crit(ap->logopt,
+ MODPREFIX "failed to allocate mount %s", realpath);
+ handle_mounts_startup_cond_destroy(&suc);
+ mounts_mutex_unlock(ap);
+ master_free_map_source(source, 1);
+ master_free_mapent(entry);
+ return 1;
+ }
+
+
suc.ap = nap;
suc.root = mountpoint;
suc.done = 0;
@@ -318,6 +331,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
"failed to create mount handler thread for %s",
realpath);
handle_mounts_startup_cond_destroy(&suc);
+ mnts_remove_submount(nap->path);
mounts_mutex_unlock(ap);
master_free_map_source(source, 1);
master_free_mapent(entry);
@@ -328,6 +342,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
status = pthread_cond_wait(&suc.cond, &suc.mutex);
if (status) {
handle_mounts_startup_cond_destroy(&suc);
+ mnts_remove_submount(nap->path);
mounts_mutex_unlock(ap);
master_free_map_source(source, 1);
master_free_mapent(entry);
@@ -339,6 +354,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
crit(ap->logopt,
MODPREFIX "failed to create submount for %s", realpath);
handle_mounts_startup_cond_destroy(&suc);
+ mnts_remove_submount(nap->path);
mounts_mutex_unlock(ap);
master_free_map_source(source, 1);
master_free_mapent(entry);
@@ -347,7 +363,6 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name,
nap->thid = thid;
ap->submnt_count++;
- list_add(&nap->mounts, &ap->submounts);
handle_mounts_startup_cond_destroy(&suc);
mounts_mutex_unlock(ap);