Change the first argument of vfs_cmount() to a handy struct mntarg* and

call it accordingly.

(No filesystems implement vfs_cmount() yet, so this is a no-op commit)
This commit is contained in:
Poul-Henning Kamp 2004-12-06 16:39:05 +00:00
parent 8fefdf0057
commit 5ddb073996
2 changed files with 22 additions and 15 deletions

View File

@ -508,6 +508,7 @@ mount(td, uap)
char *fstype; char *fstype;
char *fspath; char *fspath;
struct vfsconf *vfsp; struct vfsconf *vfsp;
struct mntarg *ma = NULL;
int error; int error;
/* Kick out MNT_ROOTFS early as it is legal internally */ /* Kick out MNT_ROOTFS early as it is legal internally */
@ -515,27 +516,33 @@ mount(td, uap)
return (EINVAL); return (EINVAL);
fstype = malloc(MFSNAMELEN, M_TEMP, M_WAITOK); fstype = malloc(MFSNAMELEN, M_TEMP, M_WAITOK);
fspath = malloc(MNAMELEN, M_TEMP, M_WAITOK);
/* /*
* vfs_mount() actually takes a kernel string for `type' and * vfs_mount() actually takes a kernel string for `type' and
* `path' now, so extract them. * `path' now, so extract them.
*/ */
error = copyinstr(uap->type, fstype, MFSNAMELEN, NULL); error = copyinstr(uap->type, fstype, MFSNAMELEN, NULL);
if (error == 0) mtx_lock(&Giant); /* XXX ? */
error = copyinstr(uap->path, fspath, MNAMELEN, NULL); vfsp = vfs_byname_kld(fstype, td, &error);
if (error == 0) { mtx_unlock(&Giant); /* XXX ? */
if (vfsp == NULL) {
free(fstype, M_TEMP);
return (ENOENT);
}
fspath = malloc(MNAMELEN, M_TEMP, M_WAITOK);
error = copyinstr(uap->path, fspath, MNAMELEN, NULL);
if (error == 0 && vfsp->vfc_vfsops->vfs_cmount != NULL) {
ma = mount_argsu(ma, "fstype", uap->type, MNAMELEN);
ma = mount_argsu(ma, "fspath", uap->path, MNAMELEN);
ma = mount_argb(ma, uap->flags & MNT_RDONLY, "noro");
ma = mount_argb(ma, !(uap->flags & MNT_NOSUID), "nosuid");
ma = mount_argb(ma, !(uap->flags & MNT_NOEXEC), "noexec");
error = vfsp->vfc_vfsops->vfs_cmount(
ma, uap->data, uap->flags, td);
} else if (error == 0) {
mtx_lock(&Giant); mtx_lock(&Giant);
vfsp = vfs_byname_kld(fstype, td, &error); error = vfs_domount(td, fstype, fspath,
if (vfsp != NULL) { uap->flags, uap->data, 1);
if (vfsp->vfc_vfsops->vfs_cmount != NULL) {
error = vfsp->vfc_vfsops->vfs_cmount(
fspath, uap->data, uap->flags, td);
} else {
error = vfs_domount(td, fstype, fspath,
uap->flags, uap->data, 1);
}
}
mtx_unlock(&Giant); mtx_unlock(&Giant);
} }
free(fstype, M_TEMP); free(fstype, M_TEMP);

View File

@ -461,7 +461,7 @@ struct nameidata;
struct sysctl_req; struct sysctl_req;
struct mntarg; struct mntarg;
typedef int vfs_cmount_t(char *path, void *data, int flags, struct thread *td); typedef int vfs_cmount_t(struct mntarg *ma, void *data, int flags, struct thread *td);
typedef int vfs_omount_t(struct mount *mp, char *path, caddr_t data, typedef int vfs_omount_t(struct mount *mp, char *path, caddr_t data,
struct thread *td); struct thread *td);
typedef int vfs_start_t(struct mount *mp, int flags, struct thread *td); typedef int vfs_start_t(struct mount *mp, int flags, struct thread *td);