Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 May 2017 16:06:33 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r317883 - stable/8/sys/fs/tmpfs
Message-ID:  <201705061606.v46G6X9Y031098@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sat May  6 16:06:33 2017
New Revision: 317883
URL: https://svnweb.freebsd.org/changeset/base/317883

Log:
  MFC r230208, r230252, r234346:
  
    Add nfs export support to tmpfs(5)
  
    Return EOPNOTSUPP since we only support update mounts for NFS export.
  
    tmpfs: Allow update mounts only for certain options.
    Since r230208 update mounts were allowed if the list of mount options
    contained the "export" option. This is not correct as tmpfs doesn't really
    support updating all options.

Modified:
  stable/8/sys/fs/tmpfs/tmpfs.h
  stable/8/sys/fs/tmpfs/tmpfs_vfsops.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/fs/   (props changed)

Modified: stable/8/sys/fs/tmpfs/tmpfs.h
==============================================================================
--- stable/8/sys/fs/tmpfs/tmpfs.h	Sat May  6 13:28:42 2017	(r317882)
+++ stable/8/sys/fs/tmpfs/tmpfs.h	Sat May  6 16:06:33 2017	(r317883)
@@ -389,6 +389,9 @@ struct tmpfs_mount {
 	 * tmpfs_pool.c. */
 	uma_zone_t		tm_dirent_pool;
 	uma_zone_t		tm_node_pool;
+
+	/* Read-only status. */
+	int			tm_ronly;
 };
 #define TMPFS_LOCK(tm) mtx_lock(&(tm)->allnode_lock)
 #define TMPFS_UNLOCK(tm) mtx_unlock(&(tm)->allnode_lock)

Modified: stable/8/sys/fs/tmpfs/tmpfs_vfsops.c
==============================================================================
--- stable/8/sys/fs/tmpfs/tmpfs_vfsops.c	Sat May  6 13:28:42 2017	(r317882)
+++ stable/8/sys/fs/tmpfs/tmpfs_vfsops.c	Sat May  6 16:06:33 2017	(r317883)
@@ -81,6 +81,10 @@ static const char *tmpfs_opts[] = {
 	NULL
 };
 
+static const char *tmpfs_updateopts[] = {
+	"from", "export", NULL
+};
+
 /* --------------------------------------------------------------------- */
 
 static int
@@ -149,10 +153,13 @@ tmpfs_mount(struct mount *mp)
 		return (EINVAL);
 
 	if (mp->mnt_flag & MNT_UPDATE) {
-		/* XXX: There is no support yet to update file system
-		 * settings.  Should be added. */
-
-		return EOPNOTSUPP;
+		/* Only support update mounts for certain options. */
+		if (vfs_filteropt(mp->mnt_optnew, tmpfs_updateopts) != 0)
+			return (EOPNOTSUPP);
+		if (vfs_flagopt(mp->mnt_optnew, "ro", NULL, 0) !=
+		    ((struct tmpfs_mount *)mp->mnt_data)->tm_ronly)
+			return (EOPNOTSUPP);
+		return (0);
 	}
 
 	vn_lock(mp->mnt_vnodecovered, LK_SHARED | LK_RETRY);
@@ -224,6 +231,7 @@ tmpfs_mount(struct mount *mp)
 	    tmpfs_node_ctor, tmpfs_node_dtor,
 	    tmpfs_node_init, tmpfs_node_fini,
 	    UMA_ALIGN_PTR, 0);
+	tmp->tm_ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
 
 	/* Allocate the root node. */
 	error = tmpfs_alloc_node(tmp, VDIR, root_uid,



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