tmpfs nfs exports?
Alfred Perlstein
bright at mu.org
Tue Oct 30 09:37:27 UTC 2012
Hey folks, any reason why not to include the following patch in 9.1? It
would be nice to have tmpfs be exportable.
I'm good to commit it, I can also wait until post 9.1.
$ svn diff
Index: .
===================================================================
--- . (revision 242331)
+++ . (working copy)
Property changes on: .
___________________________________________________________________
Modified: svn:mergeinfo
Merged /head:r234346
Index: sys
===================================================================
--- sys (revision 242331)
+++ sys (working copy)
Property changes on: sys
___________________________________________________________________
Modified: svn:mergeinfo
Merged /head/sys:r234346
Index: sys/fs
===================================================================
--- sys/fs (revision 242331)
+++ sys/fs (working copy)
Property changes on: sys/fs
___________________________________________________________________
Modified: svn:mergeinfo
Merged /head/sys/fs:r234346
Index: sys/fs/tmpfs/tmpfs.h
===================================================================
--- sys/fs/tmpfs/tmpfs.h (revision 242331)
+++ sys/fs/tmpfs/tmpfs.h (working copy)
@@ -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)
Index: sys/fs/tmpfs/tmpfs_vfsops.c
===================================================================
--- sys/fs/tmpfs/tmpfs_vfsops.c (revision 242331)
+++ sys/fs/tmpfs/tmpfs_vfsops.c (working copy)
@@ -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 freebsd-stable
mailing list