Convert nullfs to nmount.
This commit is contained in:
parent
9ee6bf717f
commit
9fcc512cd6
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=97186
@ -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 */
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user