Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Jan 2012 19:32:22 +0200
From:      Mikolaj Golub <trociny@freebsd.org>
To:        Jaakko Heinonen <jh@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, Kevin Lo <kevlo@FreeBSD.org>, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r230252 - head/sys/fs/tmpfs
Message-ID:  <86lioztzh5.fsf@kopusha.home.net>
In-Reply-To: <20120122134218.GA2247@a91-153-116-96.elisa-laajakaista.fi> (Jaakko Heinonen's message of "Sun, 22 Jan 2012 15:42:18 %2B0200")
References:  <201201170125.q0H1PrlJ061058@svn.freebsd.org> <20120117171031.GA2316@a91-153-116-96.elisa-laajakaista.fi> <86obtvvr4v.fsf@kopusha.home.net> <20120122134218.GA2247@a91-153-116-96.elisa-laajakaista.fi>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sun, 22 Jan 2012 15:42:18 +0200 Jaakko Heinonen wrote:

 JH> Hi,

 JH> On 2012-01-22, Mikolaj Golub wrote:
 >>  JH> # mount -u -o ro /mnt
 >>  JH> mount: tmpfs : Operation not supported
 >>  JH> # mount -u -o ro,export /mnt
 >>  JH> #
 >> 
 >> There is no error but ro is still ignored, so this is only the issue with
 >> reporting. Note, the code for nullfs (as an example) looks the same.

 JH> This is not true. "ro" is not ignored:

 JH> # mount -t tmpfs
 JH> tmpfs on /mnt (tmpfs, local)
 JH> # mount -u -o ro /mnt
 JH> mount: tmpfs: Operation not supported
 JH> # mount -t tmpfs
 JH> tmpfs on /mnt (tmpfs, local)
 JH> # mount -u -o ro,export /mnt
 JH> # mount -t tmpfs
 JH> tmpfs on /mnt (tmpfs, local, read-only)

Sorry, yes I was wrong. vfs_domount_update() stores old MNT flags and applies
new ones, then calls VFS_MOUNT(), and if it only fails it will restore the old
flags.

So nullfs has the same issue now although the bug is more difficult to expose
as nullfs uses its own mount_nullfs, which currently does not support update
option. Thus to trigger the bug someone has to use nmount(2).

 >> It could be fixed with vfs_filteropt(9), not sure if this is worth doing here
 >> though.

 JH> The problem with vfs_filteropt(9) is that it will allow some additional
 JH> options (global_opts list in vfs_mount.c). However those options might
 JH> already work sufficiently with update mount. Here is a mostly untested
 JH> patch:

When I was looking at mount option interface it also looked for me a bit
"complicated" :-), that is why I hoped we could just ignore the issue if it
were just reporting an error...

Also, may be we should allow remounting ro (and may be some othe options) for
tmpfs?

 JH> %%%
 JH> Index: sys/fs/tmpfs/tmpfs_vfsops.c
 JH> ===================================================================
 JH> --- sys/fs/tmpfs/tmpfs_vfsops.c        (revision 230328)
 JH> +++ sys/fs/tmpfs/tmpfs_vfsops.c        (working copy)
 JH> @@ -82,6 +82,10 @@ static const char *tmpfs_opts[] = {
 JH>          NULL
 JH>  };
 JH>  
 JH> +static const char *tmpfs_updateopts[] = {
 JH> +        "from", "export", NULL
 JH> +};
 JH> +
 JH>  /* --------------------------------------------------------------------- */
 JH>  
 JH>  static int
 JH> @@ -150,12 +154,10 @@ tmpfs_mount(struct mount *mp)
 JH>                  return (EINVAL);
 JH>  
 JH>          if (mp->mnt_flag & MNT_UPDATE) {
 JH> -                /*
 JH> -                 * Only support update mounts for NFS export.
 JH> -                 */
 JH> -                if (vfs_flagopt(mp->mnt_optnew, "export", NULL, 0))
 JH> -                        return (0);
 JH> -                return (EOPNOTSUPP);
 JH> +                /* Only support update mounts for certain options. */
 JH> +                if (vfs_filteropt(mp->mnt_optnew, tmpfs_updateopts) != 0)
 JH> +                        return (EOPNOTSUPP);
 JH> +                return (0);
 JH>          }
 JH>  
 JH>          vn_lock(mp->mnt_vnodecovered, LK_SHARED | LK_RETRY);
 JH> %%%

 JH> -- 
 JH> Jaakko

-- 
Mikolaj Golub



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86lioztzh5.fsf>