mount / unmount and mountcheckdirs()

Andriy Gapon avg at FreeBSD.org
Fri Sep 15 16:37:08 UTC 2017


On 15/09/2017 19:02, Edward Napierala wrote:
> 2017-09-15 12:56 GMT+01:00 Andriy Gapon <avg at freebsd.org <mailto:avg at freebsd.org>>:
> 
>     On 15/09/2017 13:08, Edward Napierala wrote:
>     > It does.  For example:
>     >
>     > [trasz at v2:~]% cd /media/md0
>     > [trasz at v2:/media/md0]% mount
>     > /dev/ada0s1a on / (ufs, local, noatime, journaled soft-updates)
>     > devfs on /dev (devfs, local, multilabel)
>     > map -hosts on /net (autofs)
>     > map -media on /media (autofs)
> 
>     Interesting, I thought that /dev/md0 would get mounted as soon as /media/md0 is
>     looked up.  But maybe that would be sub-optimal for some common scenarios...
>     FWIW, ZFS snapshots get auto-mounted under .zfs as soon as there is a lookup.
> 
> 
> You really don't want it to work that way.  If you have a directory with thousands
> of mountpoints inside, you don't want to mount all of them every time you do "ls"
> in that directory.

Well, "ls" wouldn't trigger the mounting as it's just VOP_READDIR in the parent
vnode, "ls -l" (or any other options that require file attributes) is a
different story :-)

> Same problem with mounting on "cd".  That's why autofs triggers
> in three cases: in VOP_READDIR(9), VOP_GETATTR(9), and VOP_LOOKUP(9)
> with the vnode as a parent dir.

Well, "cd" is also a different story, you can't cd to hundreds of directories at
once.  Of course, the filesystem doesn't really know if it's "cd" or something
else that triggered VOP_LOOKUP.  Although VOP_ACCESS could be used as a hint, it
is a rather weak hint.

In any case, I prefer the mount-on-lookup approach as it is "more seamless".

-- 
Andriy Gapon


More information about the freebsd-arch mailing list