From 67225059b8090362350015a99a21954e8261ead6 Mon Sep 17 00:00:00 2001 From: Packit Service Date: Apr 16 2021 22:13:53 +0000 Subject: Apply patch autofs-5.1.5-dont-use-tree_is_mounted-for-mounted-checks.patch patch_name: autofs-5.1.5-dont-use-tree_is_mounted-for-mounted-checks.patch present_in_specfile: true --- diff --git a/CHANGELOG b/CHANGELOG index d59be77..8f9ee36 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -69,6 +69,7 @@ xx/xx/2018 autofs-5.1.5 - add glibc getmntent_r(). - use local getmntent_r in table_is_mounted(). - refactor unlink_active_mounts() in direct.c. +- don't use tree_is_mounted() for mounted checks. 19/12/2017 autofs-5.1.4 - fix spec file url. diff --git a/daemon/direct.c b/daemon/direct.c index f74cfe5..e567e7e 100644 --- a/daemon/direct.c +++ b/daemon/direct.c @@ -82,7 +82,7 @@ static void mnts_cleanup(void *arg) return; } -int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, struct mapent *me) +int do_umount_autofs_direct(struct autofs_point *ap, struct mapent *me) { struct ioctl_ops *ops = get_ioctl_ops(); char buf[MAX_ERR_BUF]; @@ -98,7 +98,7 @@ int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, stru if (me->ioctlfd != -1) { if (ap->state == ST_READMAP && - tree_is_mounted(mnts, me->key, MNTS_REAL)) { + is_mounted(me->key, MNTS_REAL)) { error(ap->logopt, "attempt to umount busy direct mount %s", me->key); @@ -204,11 +204,8 @@ int umount_autofs_direct(struct autofs_point *ap) { struct map_source *map; struct mapent_cache *nc, *mc; - struct mnt_list *mnts; struct mapent *me, *ne; - mnts = tree_make_mnt_tree("/"); - pthread_cleanup_push(mnts_cleanup, mnts); nc = ap->entry->master->nc; cache_readlock(nc); pthread_cleanup_push(cache_lock_cleanup, nc); @@ -233,7 +230,7 @@ int umount_autofs_direct(struct autofs_point *ap) * catatonic regardless of the reason for the * failed umount. */ - error = do_umount_autofs_direct(ap, mnts, me); + error = do_umount_autofs_direct(ap, me); if (!error) goto done; @@ -246,7 +243,6 @@ done: map = map->next; } pthread_cleanup_pop(1); - pthread_cleanup_pop(1); close(ap->state_pipe[0]); close(ap->state_pipe[1]); @@ -947,7 +943,7 @@ void *expire_proc_direct(void *arg) } /* It's got a mount, deal with in the outer loop */ - if (tree_is_mounted(mnts, me->key, MNTS_REAL)) { + if (is_mounted(me->key, MNTS_REAL)) { pthread_setcancelstate(cur_state, NULL); continue; } diff --git a/daemon/state.c b/daemon/state.c index 990df1f..999590b 100644 --- a/daemon/state.c +++ b/daemon/state.c @@ -438,8 +438,8 @@ static void do_readmap_mount(struct autofs_point *ap, struct mnt_list *mnts, else ap->exp_runfreq = runfreq; } - } else if (!tree_is_mounted(mnts, me->key, MNTS_REAL)) - do_umount_autofs_direct(ap, mnts, me); + } else if (!is_mounted(me->key, MNTS_REAL)) + do_umount_autofs_direct(ap, me); else debug(ap->logopt, "%s is mounted", me->key); diff --git a/include/automount.h b/include/automount.h index aa2ffe0..10dafea 100644 --- a/include/automount.h +++ b/include/automount.h @@ -613,7 +613,7 @@ void submount_signal_parent(struct autofs_point *ap, unsigned int success); void close_mount_fds(struct autofs_point *ap); int umount_autofs(struct autofs_point *ap, const char *root, int force); int umount_autofs_indirect(struct autofs_point *ap, const char *root); -int do_umount_autofs_direct(struct autofs_point *ap, struct mnt_list *mnts, struct mapent *me); +int do_umount_autofs_direct(struct autofs_point *ap, struct mapent *me); int umount_autofs_direct(struct autofs_point *ap); int umount_autofs_offset(struct autofs_point *ap, struct mapent *me); int handle_packet_expire_indirect(struct autofs_point *ap, autofs_packet_expire_indirect_t *pkt); diff --git a/include/mounts.h b/include/mounts.h index f7bc458..3e2c266 100644 --- a/include/mounts.h +++ b/include/mounts.h @@ -107,7 +107,6 @@ struct mnt_list *tree_make_mnt_tree(const char *path); int tree_get_mnt_list(struct mnt_list *mnts, struct list_head *list, const char *path, int include); int tree_get_mnt_sublist(struct mnt_list *mnts, struct list_head *list, const char *path, int include); int tree_find_mnt_ents(struct mnt_list *mnts, struct list_head *list, const char *path); -int tree_is_mounted(struct mnt_list *mnts, const char *path, unsigned int type); void set_tsd_user_vars(unsigned int, uid_t, gid_t); const char *mount_type_str(unsigned int); void set_exp_timeout(struct autofs_point *ap, struct map_source *source, time_t timeout); diff --git a/lib/mounts.c b/lib/mounts.c index cf637f4..b18b94a 100644 --- a/lib/mounts.c +++ b/lib/mounts.c @@ -1368,46 +1368,6 @@ int tree_find_mnt_ents(struct mnt_list *mnts, struct list_head *list, const char return 0; } -int tree_is_mounted(struct mnt_list *mnts, const char *path, unsigned int type) -{ - struct ioctl_ops *ops = get_ioctl_ops(); - struct list_head *p; - struct list_head list; - int mounted = 0; - - if (ops->ismountpoint) - return ioctl_is_mounted(path, type); - - INIT_LIST_HEAD(&list); - - if (!tree_find_mnt_ents(mnts, &list, path)) - return 0; - - list_for_each(p, &list) { - struct mnt_list *mptr; - - mptr = list_entry(p, struct mnt_list, entries); - - if (type) { - if (type & MNTS_REAL) { - if (mptr->flags & MNTS_AUTOFS) { - mounted = 1; - break; - } - } else if (type & MNTS_AUTOFS) { - if (mptr->flags & MNTS_AUTOFS) { - mounted = 1; - break; - } - } else { - mounted = 1; - break; - } - } - } - return mounted; -} - void set_tsd_user_vars(unsigned int logopt, uid_t uid, gid_t gid) { struct thread_stdenv_vars *tsv;