diff options
author | Ian Kent <raven@themaw.net> | 2019-06-07 10:48:51 +0800 |
---|---|---|
committer | Ian Kent <raven@themaw.net> | 2020-12-06 08:28:15 +0800 |
commit | 759b1cc2e7da8305039dc51d4a5bb533b4da570b (patch) | |
tree | 8bbc11e61bcce22cfc1eddcc4881e02864314c09 /modules | |
parent | dd45e4d1ddb47b9aeccc3405610a3ff2f6c850ae (diff) | |
download | autofs-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.c | 17 |
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); |