On Fri, 2010-12-10 at 17:10 -0200, Leonardo Chiquitto wrote: > 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.
Yes, an obvious problem. > > 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. Yeah, at first I thought there were a few other cases. There still might be so let me think about it further. > > 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 _______________________________________________ autofs mailing list autofs@linux.kernel.org http://linux.kernel.org/mailman/listinfo/autofs