Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
KERNEL_MOUNT(9)		 BSD Kernel Developer's	Manual	       KERNEL_MOUNT(9)

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

     free_mntarg(struct	mntarg *ma);

     kernel_mount(struct mntarg	*ma, int flags);

     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);

     The kernel_mount()	family of functions are	provided as an API for build-
     ing 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 con-
     trol 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 per-
     form 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 struc-
     ture.  The	flag is	the boolean value and name must	start with "no", oth-
     erwise a panic will occur.

     The mount_argf() function adds printf(9) style arguments to the current

     The mount_argsu() function	will add arguments to the structure from a
     userland string.

     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(
		 "fstype", vfsname,
		 "fspath", "/",
		 "from", path,

     VFS(9), VFS_MOUNT(9)

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

     The kernel_mount()	family of functions and	API was	developed by
     Poul-Henning Kamp <>.  This	manual page was	written	by Tom
     Rhodes <>.

BSD			       December	13, 2004			   BSD


Want to link to this manual page? Use this URL:

home | help