autofs-5.1.1 - fix error handling of is_mounted() From: Ian Kent If the ops->ismountpoint() ioctl call fails for some reason is_mounted() would return 0 indicating the path isn't mounted even if it is. In this case fall back to the resource intensive mount table lookup. Signed-off-by: Ian Kent --- CHANGELOG | 1 + lib/mounts.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3dd28cc..8d27e55 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -21,6 +21,7 @@ - update map_hash_table_size description. - add configuration option to use fqdn in mounts. - fix out of order call in program map lookup. +- fix error handling of is_mounted(). 21/04/2015 autofs-5.1.1 ======================= diff --git a/lib/mounts.c b/lib/mounts.c index f665721..455bdca 100644 --- a/lib/mounts.c +++ b/lib/mounts.c @@ -1032,12 +1032,19 @@ static int table_is_mounted(const char *table, const char *path, unsigned int ty return ret; } -static int ioctl_is_mounted(const char *path, unsigned int type) +static int ioctl_is_mounted(const char *table, const char *path, unsigned int type) { struct ioctl_ops *ops = get_ioctl_ops(); unsigned int mounted; + int ret; + + /* If the ioctl fails fall back to the potentially resource + * intensive mount table check. + */ + ret = ops->ismountpoint(LOGOPT_NONE, -1, path, &mounted); + if (ret == -1) + return table_is_mounted(table, path, type); - ops->ismountpoint(LOGOPT_NONE, -1, path, &mounted); if (mounted) { switch (type) { case MNTS_ALL: @@ -1056,7 +1063,7 @@ int is_mounted(const char *table, const char *path, unsigned int type) struct ioctl_ops *ops = get_ioctl_ops(); if (ops->ismountpoint) - return ioctl_is_mounted(path, type); + return ioctl_is_mounted(table, path, type); else return table_is_mounted(table, path, type); } @@ -1439,7 +1446,7 @@ int tree_is_mounted(struct mnt_list *mnts, const char *path, unsigned int type) int mounted = 0; if (ops->ismountpoint) - return ioctl_is_mounted(path, type); + return ioctl_is_mounted(_PROC_MOUNTS, path, type); INIT_LIST_HEAD(&list);