Provided by: freebsd-manpages_9.2+1-1_all bug

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 arguments, the API takes shape and provides the information necessary for the
     kernel to control the mount(8) utility.  When an error occurs, the process 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 process.  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.  Additionally, the kernel_mount() function always calls the
     free_mntarg() function.  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 structure 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, MAXPATHLEN);
             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_SHORTNAME, "noshortname");
             ma = mount_argb(ma, args.flags & MSDOSFSMNT_LONGNAME, "nolongname");
             ma = mount_argb(ma, !(args.flags & MSDOSFSMNT_NOWIN95), "nowin95");
             ma = mount_argb(ma, args.flags & MSDOSFSMNT_KICONV, "nokiconv");

             ma = mount_argsu(ma, "cs_win", args.cs_win, MAXCSLEN);
             ma = mount_argsu(ma, "cs_dos", args.cs_dos, MAXCSLEN);
             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),

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>.