kernel_mount(9)

NAME

free_mntarg, kernel_mount, kernel_vmount, mount_arg,
mount_argb,
mount_argf, mount_argsu - functions provided as part of the
kernel mount
interface

SYNOPSIS

void
free_mntarg(struct mntarg *ma);
int
kernel_mount(struct mntarg *ma, int flags);
int
kernel_vmount(int flags, ...);
struct mntarg *
mount_arg(struct mntarg *ma, const char  *name,  const  void
*val, int len);
struct mntarg *
mount_argb(struct mntarg *ma, int flag, const char *name);
struct mntarg *
mount_argf(struct  mntarg  *ma, const char *name, const char
*fmt, ...);
struct mntarg *
mount_argsu(struct mntarg *ma, const char *name, const  void
*val,
        int len);

DESCRIPTION

The kernel_mount() family of functions are provided as an
API for building a list of mount arguments which will be used to mount
file systems
from inside the kernel. By accumulating a list of argu
ments, the API
takes shape and provides the information necessary for the
kernel to control the mount(8) utility. When an error occurs, the pro
cess will stop.
This will not cause a panic(9).
The header of the structure is stored in
src/sys/kern/vfs_mount.c which permits automatic structure creation to ease the mount pro
cess. Memory
allocation must always be freed when the entire process is
complete, it
is an error otherwise.
The free_mntarg() function is used to free or clear the
mntarg structure.
The kernel_mount() function pulls information from the
structure to perform the mount request on a given file system. Additional
ly, the
kernel_mount() function always calls the free_mntarg() func
tion. If ma
contains any error code generated during the construction,
that code will
be called and the file system mount will not be attempted.
The kernel_vmount() is a function similar to printf(9) which
is used to
mount a file system.
The mount_arg() function takes a plain argument and crafts
parts of the
structure with regards to various mount options. If the
length is a
value less than 0, strlen(3) is used. This argument will be
referenced
until either free_mntarg() or kernel_mount() is called.
The mount_argb() function is used to add boolean arguments
to the structure. The flag is the boolean value and name must start
with "no", otherwise a panic will occur.
The mount_argf() function adds printf(9) style arguments to
the current
structure.
The mount_argsu() function will add arguments to the struc
ture from a
userland string.

EXAMPLES

An example of the *_cmount() function:

static int
msdosfs_cmount(struct mntarg *ma, void *data, int flags,
struct thread *td)
{
struct msdosfs_args args;
int error;
if (data == NULL)
return (EINVAL);
error = copyin(data, &args, sizeof args);
if (error)
return (error);
ma = mount_argsu(ma, "from", args.fspec, MAX
PATHLEN);
ma = mount_arg(ma, "export", &args.export, sizeof
args.export);
ma = mount_argf(ma, "uid", "%d", args.uid);
ma = mount_argf(ma, "gid", "%d", args.gid);
ma = mount_argf(ma, "mask", "%d", args.mask);
ma = mount_argf(ma, "dirmask", "%d", args.dirmask);
ma = mount_argb(ma, args.flags & MSDOSFSMNT_SHORT
NAME, "noshortname");
ma = mount_argb(ma, args.flags & MSDOSFSMNT_LONG
NAME, "nolongname");
ma = mount_argb(ma, !(args.flags & MSDOSFSM
NT_NOWIN95), "nowin95");
ma = mount_argb(ma, args.flags & MSDOSFSMNT_KICONV,
"nokiconv");
ma = mount_argsu(ma, "cs_win", args.cs_win, MAXC
SLEN);
ma = mount_argsu(ma, "cs_dos", args.cs_dos, MAXC
SLEN);
ma = mount_argsu(ma, "cs_local", args.cs_local,
MAXCSLEN);
error = kernel_mount(ma, flags);
return (error);
}
When working with kernel_vmount(), varargs must come in
pairs, e.g.,
{name, value}.

error = kernel_vmount(
MNT_RDONLY,
"fstype", vfsname,
"fspath", "/",
"from", path,
NULL);

SEE ALSO

VFS(9), VFS_MOUNT(9), vfs_mount(9)

HISTORY

The kernel_mount() family of functions and this manual page
first
appeared in FreeBSD 6.0.

AUTHORS

The kernel_mount() family of functions and API was developed
by
Poul-Henning Kamp <phk@FreeBSD.org>. This manual page was
written by Tom
Rhodes <trhodes@FreeBSD.org>.
BSD December 13, 2004
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout