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

FreeBSD Manual Pages


home | help
GETVFSENT(3)		 BSD Library Functions Manual		  GETVFSENT(3)

     getvfsent,	setvfsent, endvfsent, vfsisloadable, vfsload --	manage virtual
     filesystem	modules

     #include <sys/param.h>
     #include <sys/mount.h>

     struct ovfsconf *

     setvfsent(int cachelist);


     vfsisloadable(const char *name);

     vfsload(const char	*name);

     The getvfsent() function provides convenient access to a list of in-
     stalled virtual filesystem	modules	managed	by the kernel.	It steps
     through the list of filesystems one at a time.  A null pointer is re-
     turned when no more data is available.  The fields	in a "struct ovfsconf"
     are as follows:

     vfc_name	   the name of the filesystem
     vfc_index	   the filesystem type number assigned by the kernel and used
		   in calls to mount(2)
     vfc_refcount  the number of references to this filesystem (usually	the
		   number of mounts, but one greater for filesystems which
		   cannot be unloaded or which are statically linked into the
     vfc_flags	   flag	bits, of which none are	currently defined

     The setvfsent() and endvfsent() functions are used	to control caching of
     the filesystem list, which	is obtained in toto from the kernel via
     sysctl(3).	 If the	cachelist parameter to setvfsent() is non-zero,	the
     list will be retrieved only once, upon the	first call to one of the re-
     trieval functions,	until endvfsent() is called to clear the cache.	 In
     general, setvfsent(1) should be called by programs	using the getvfsent()
     function, and setvfsent(0)	(which is also the default state) should be
     called by programs	using the vfsload() function.

     The vfsisloadable() function returns a non-zero value if a	later call to
     vfsload(name) is likely to	succeed.  We say ``likely'' because the	condi-
     tions checked by vfsisloadable() are only a small subset of the condi-
     tions necessary for vfsload() to succeed.	In particular, vfsisloadable()
     checks that /dev/lkm is present and can be	opened for writing, and	that
     ~name_mod.o can be	found in one of	the directories	designated for LKMs.

     The vfsload() function attempts to	load a kernel module implementing
     filesystem	name.  It returns zero if the filesystem module	was success-
     fully located and loaded, or non-zero otherwise.  It should only be
     called in the following circumstances:

     1.	  getvfsbyname() has been called and returned a	non-zero value.

     2.	  vfsisloadable() has been called and returned a non-zero value.

     3.	  sufficient temporary file space is available and writable in one of
	  ${TMPDIR}, /var/tmp, or /tmp.

     Here is an	example, taken from the	source to mount_cd9660(8):

	   struct vfsconf *vfc;
	   int error;

	   /* setup code here */

	   error = getvfsbyname("cd9660", &vfc);
	   if (error &&	vfsisloadable("cd9660")) {
		   if (vfsload("cd9660"))
			   err(EX_OSERR, "vfsload(cd9660)");
		   endvfsent();	   /* flush cache */
		   error = getvfsbyname("cd9660", &vfc);
	   if (error)
		   errx(1, "cd9660 filesystem is not available");

	   if (mount(vfc.vfc_name, dir,	mntflags, &args) < 0)
		   err(1, NULL);

     The getvfsent() routine returns a pointer to a static data	structure when
     it	succeeds, and returns a	null pointer when it fails.  On	failure, errno
     may be set	to one of the values documented	for sysctl(3) or malloc(3), if
     a failure of that function	was the	cause; otherwise errno will be unmodi-

     The vfsload() function returns a non-zero value on	failure, or zero on
     success.  If vfsload() fails, errno may be	set to one of the values docu-
     mented for	fork(2), waitpid(2), chdir(2), or execlp(3), or	the return
     status of the modload(8) program, which is	not currently particularly
     useful but	eventually will	be.  In	addition, if modload(8)	exits on a
     signal, vfsload() will fail and set errno to EINVAL.

     TMPDIR   location for temporary file created by modload(8)	on behalf of
     LKMDIR   alternate	directory for vfsisloadable() and vfsload() to search
	      for loadable modules.

     mount(2), modload(8), mount(8)

     The return	value of the modload(8)	command	isn't particularly useful when
     interpreted as an errno value (or anything	else, for that matter).

     The loadable filesystem support was written by Garrett A. Wollman,	based
     on	generic	loadable kernel	module support by
     Terry Lambert.

     The getvfsent() family of functions first appeared	in FreeBSD 2.0.

BSD			      September	24, 1994			   BSD


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

home | help