[Midnightbsd-cvs] src [8313] trunk/sys/fs/tmpfs: allow zfs export of tmpfs

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Sep 17 18:32:57 EDT 2016


Revision: 8313
          http://svnweb.midnightbsd.org/src/?rev=8313
Author:   laffer1
Date:     2016-09-17 18:32:57 -0400 (Sat, 17 Sep 2016)
Log Message:
-----------
allow zfs export of tmpfs

Modified Paths:
--------------
    trunk/sys/fs/tmpfs/tmpfs.h
    trunk/sys/fs/tmpfs/tmpfs_vfsops.c

Modified: trunk/sys/fs/tmpfs/tmpfs.h
===================================================================
--- trunk/sys/fs/tmpfs/tmpfs.h	2016-09-17 22:32:35 UTC (rev 8312)
+++ trunk/sys/fs/tmpfs/tmpfs.h	2016-09-17 22:32:57 UTC (rev 8313)
@@ -387,6 +387,9 @@
 	 * 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: trunk/sys/fs/tmpfs/tmpfs_vfsops.c
===================================================================
--- trunk/sys/fs/tmpfs/tmpfs_vfsops.c	2016-09-17 22:32:35 UTC (rev 8312)
+++ trunk/sys/fs/tmpfs/tmpfs_vfsops.c	2016-09-17 22:32:57 UTC (rev 8313)
@@ -82,6 +82,10 @@
 	NULL
 };
 
+static const char *tmpfs_updateopts[] = {
+	"from", "export", NULL
+};
+
 /* --------------------------------------------------------------------- */
 
 static int
@@ -193,10 +197,13 @@
 		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);
@@ -269,6 +276,7 @@
 	    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,



More information about the Midnightbsd-cvs mailing list