Hello Ian and list, I'd like to forward a bug report we received on openSUSE's Bugzilla [1]. Please consider the following setup to reproduce the problem:
host:~ # grep automount /etc/nsswitch.conf automount: files host:~ # cat /etc/auto.master /vol /etc/auto.vol host:~ # cat /etc/auto.vol data1 -fstype=nfs,ro,rsize=8192,wsize=8192,intr,nolock,nosuid srv:/data1 data2 -fstype=nfs,ro,rsize=8192,wsize=8192,intr,nolock,nosuid srv:/data2 data3 -fstype=nfs,ro,rsize=8192,wsize=8192,intr,nolock,nosuid srv:/data3 host:~ # cat /etc/sysconfig/autofs AUTOFS_OPTIONS="" LOCAL_OPTIONS="" APPEND_OPTIONS="yes" DEFAULT_MASTER_MAP_NAME="auto.master" DEFAULT_TIMEOUT=600 DEFAULT_BROWSE_MODE="yes" DEFAULT_LOGGING="debug" USE_MISC_DEVICE="yes" host:~ # ls -F /vol data1/ data2/ data3/ The problem depends on ghosting being enabled (ie, BROWSE_MODE=yes). When we try to access a non-existent key/entry, AutoFS will fail to mount it but will still create the mount point: host:~ # ls -d /vol/invalid; sleep 10; ls -d /vol/invalid ls: cannot access /vol/invalid: No such file or directory /vol/invalid host:~ # ls -F /vol data1/ data2/ data3/ invalid/ The problem happens because lookup_ghost() iterates over all cached mapents and creates directories for each entry in the cache. Since the cache also stores entries for failed mounts (negative entries), it ends up creating directories for mount points that don't exist in the map. I tested the patch below and it resolves the problem for me, but I'm not sure if this is the best (or even the correct) way to fix the bug. I'd appreciate if you could review and comment. Thanks, Leonardo [1] https://bugzilla.novell.com/show_bug.cgi?id=658734 When ghosting is enabled, don't create mount points for cached entries that don't have a valid mapent. Index: autofs-5.0.5/daemon/lookup.c =================================================================== --- autofs-5.0.5.orig/daemon/lookup.c +++ autofs-5.0.5/daemon/lookup.c @@ -604,6 +604,9 @@ int lookup_ghost(struct autofs_point *ap if (!strcmp(me->key, "*")) goto next; + if (!me->mapent) + goto next; + if (*me->key == '/') { /* It's a busy multi-mount - leave till next time */ if (list_empty(&me->multi_list)) _______________________________________________ autofs mailing list autofs@linux.kernel.org http://linux.kernel.org/mailman/listinfo/autofs