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

Reply via email to