Convert nullfs to nmount.

This commit is contained in:
Maxime Henrion 2002-05-23 23:07:27 +00:00
parent 9ee6bf717f
commit 9fcc512cd6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=97186
2 changed files with 12 additions and 17 deletions

View File

@ -38,10 +38,6 @@
* $FreeBSD$ * $FreeBSD$
*/ */
struct null_args {
char *target; /* Target of loopback */
};
struct null_mount { struct null_mount {
struct mount *nullm_vfs; struct mount *nullm_vfs;
struct vnode *nullm_rootvp; /* Reference to root null_node */ struct vnode *nullm_rootvp; /* Reference to root null_node */

View File

@ -62,8 +62,8 @@ static int nullfs_fhtovp(struct mount *mp, struct fid *fidp,
struct vnode **vpp); struct vnode **vpp);
static int nullfs_checkexp(struct mount *mp, struct sockaddr *nam, static int nullfs_checkexp(struct mount *mp, struct sockaddr *nam,
int *extflagsp, struct ucred **credanonp); int *extflagsp, struct ucred **credanonp);
static int nullfs_mount(struct mount *mp, char *path, caddr_t data, static int nullfs_mount(struct mount *mp, struct nameidata *ndp,
struct nameidata *ndp, struct thread *td); struct thread *td);
static int nullfs_quotactl(struct mount *mp, int cmd, uid_t uid, static int nullfs_quotactl(struct mount *mp, int cmd, uid_t uid,
caddr_t arg, struct thread *td); caddr_t arg, struct thread *td);
static int nullfs_root(struct mount *mp, struct vnode **vpp); static int nullfs_root(struct mount *mp, struct vnode **vpp);
@ -85,20 +85,18 @@ static int nullfs_extattrctl(struct mount *mp, int cmd,
* Mount null layer * Mount null layer
*/ */
static int static int
nullfs_mount(mp, path, data, ndp, td) nullfs_mount(mp, ndp, td)
struct mount *mp; struct mount *mp;
char *path;
caddr_t data;
struct nameidata *ndp; struct nameidata *ndp;
struct thread *td; struct thread *td;
{ {
int error = 0; int error = 0;
struct null_args args;
struct vnode *lowerrootvp, *vp; struct vnode *lowerrootvp, *vp;
struct vnode *nullm_rootvp; struct vnode *nullm_rootvp;
struct null_mount *xmp; struct null_mount *xmp;
char *target;
size_t size; size_t size;
int isvnunlocked = 0; int isvnunlocked = 0, len;
NULLFSDEBUG("nullfs_mount(mp = %p)\n", (void *)mp); NULLFSDEBUG("nullfs_mount(mp = %p)\n", (void *)mp);
@ -113,9 +111,9 @@ nullfs_mount(mp, path, data, ndp, td)
/* /*
* Get argument * Get argument
*/ */
error = copyin(data, (caddr_t)&args, sizeof(struct null_args)); error = vfs_getopt(mp->mnt_optnew, "target", (void **)&target, &len);
if (error) if (error || target[len - 1] != '\0')
return (error); return (EINVAL);
/* /*
* Unlock lower node to avoid deadlock. * Unlock lower node to avoid deadlock.
@ -130,7 +128,7 @@ nullfs_mount(mp, path, data, ndp, td)
* Find lower node * Find lower node
*/ */
NDINIT(ndp, LOOKUP, FOLLOW|WANTPARENT|LOCKLEAF, NDINIT(ndp, LOOKUP, FOLLOW|WANTPARENT|LOCKLEAF,
UIO_USERSPACE, args.target, td); UIO_SYSSPACE, target, td);
error = namei(ndp); error = namei(ndp);
/* /*
* Re-lock vnode. * Re-lock vnode.
@ -197,7 +195,7 @@ nullfs_mount(mp, path, data, ndp, td)
mp->mnt_data = (qaddr_t) xmp; mp->mnt_data = (qaddr_t) xmp;
vfs_getnewfsid(mp); vfs_getnewfsid(mp);
(void) copyinstr(args.target, mp->mnt_stat.f_mntfromname, (void) copystr(target, mp->mnt_stat.f_mntfromname,
MNAMELEN - 1, &size); MNAMELEN - 1, &size);
bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size); bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
(void)nullfs_statfs(mp, &mp->mnt_stat, td); (void)nullfs_statfs(mp, &mp->mnt_stat, td);
@ -408,7 +406,7 @@ nullfs_extattrctl(mp, cmd, filename_vp, namespace, attrname, td)
static struct vfsops null_vfsops = { static struct vfsops null_vfsops = {
nullfs_mount, NULL,
nullfs_start, nullfs_start,
nullfs_unmount, nullfs_unmount,
nullfs_root, nullfs_root,
@ -422,6 +420,7 @@ static struct vfsops null_vfsops = {
nullfs_init, nullfs_init,
nullfs_uninit, nullfs_uninit,
nullfs_extattrctl, nullfs_extattrctl,
nullfs_mount,
}; };
VFS_SET(null_vfsops, nullfs, VFCF_LOOPBACK); VFS_SET(null_vfsops, nullfs, VFCF_LOOPBACK);