summaryrefslogtreecommitdiffstats
path: root/sys/cddl/compat/opensolaris/kern
diff options
context:
space:
mode:
authorjamie <jamie@FreeBSD.org>2009-03-02 23:26:30 +0000
committerjamie <jamie@FreeBSD.org>2009-03-02 23:26:30 +0000
commit63f98fcc6a46518f1e430026c32dd9c31dff0a84 (patch)
treeb070bef8a4d0b9e895916c453fb1a0a0f82434c0 /sys/cddl/compat/opensolaris/kern
parent12e34d9850ea5157971c208839b4af421d679674 (diff)
downloadFreeBSD-src-63f98fcc6a46518f1e430026c32dd9c31dff0a84.zip
FreeBSD-src-63f98fcc6a46518f1e430026c32dd9c31dff0a84.tar.gz
Extend the "vfsopt" mount options for more general use. Make struct
vfsopt and the vfs_buildopts function public, and add some new fields to struct vfsopt (pos and seen), and new functions vfs_getopt_pos and vfs_opterror. Further extend the interface to allow reading options from the kernel in addition to sending them to the kernel, with vfs_setopt and related functions. While this allows the "name=value" option interface to be used for more than just FS mounts (planned use is for jails), it retains the current "vfsopt" name and <sys/mount.h> requirement. Approved by: bz (mentor)
Diffstat (limited to 'sys/cddl/compat/opensolaris/kern')
-rw-r--r--sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c25
1 files changed, 3 insertions, 22 deletions
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c b/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c
index f1bb4e2..045b8aa 100644
--- a/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c
+++ b/sys/cddl/compat/opensolaris/kern/opensolaris_vfs.c
@@ -39,14 +39,6 @@ __FBSDID("$FreeBSD$");
MALLOC_DECLARE(M_MOUNT);
-TAILQ_HEAD(vfsoptlist, vfsopt);
-struct vfsopt {
- TAILQ_ENTRY(vfsopt) link;
- char *name;
- void *value;
- int len;
-};
-
void
vfs_setmntopt(vfs_t *vfsp, const char *name, const char *arg,
int flags __unused)
@@ -64,6 +56,8 @@ vfs_setmntopt(vfs_t *vfsp, const char *name, const char *arg,
namesize = strlen(name) + 1;
opt->name = malloc(namesize, M_MOUNT, M_WAITOK);
strlcpy(opt->name, name, namesize);
+ opt->pos = -1;
+ opt->seen = 1;
if (arg == NULL) {
opt->value = NULL;
@@ -80,22 +74,9 @@ vfs_setmntopt(vfs_t *vfsp, const char *name, const char *arg,
void
vfs_clearmntopt(vfs_t *vfsp, const char *name)
{
- struct vfsopt *opt;
- if (vfsp->mnt_opt == NULL)
- return;
/* TODO: Locking. */
- TAILQ_FOREACH(opt, vfsp->mnt_opt, link) {
- if (strcmp(opt->name, name) == 0)
- break;
- }
- if (opt != NULL) {
- TAILQ_REMOVE(vfsp->mnt_opt, opt, link);
- free(opt->name, M_MOUNT);
- if (opt->value != NULL)
- free(opt->value, M_MOUNT);
- free(opt, M_MOUNT);
- }
+ vfs_deleteopt(vfsp->mnt_opt, name);
}
int
OpenPOWER on IntegriCloud