SYNOPSIS
In sys/param.h In sys/mount.h Ft int Fn vfs_register struct vfsconf *vfc Ft int Fn vfs_unregister struct vfsconf *vfc Ft int Fn vfs_modevent module_t mod int type void *dataDESCRIPTION
Each file system type known to the kernel has a Vt vfsconf structure that contains the information required to create a new mount of that file systems type.struct vfsconf { struct vfsops *vfc_vfsops; /* file system operations vector */ char vfc_name[MFSNAMELEN]; /* file system type name */ int vfc_typenum; /* historic file system type number */ int vfc_refcount; /* number mounted of this type */ int vfc_flags; /* permanent flags */ struct vfsconf *vfc_next; /* next in list */ };
When a new file system is mounted, mount(2) does a lookup of the Vt vfsconf structure by its name, and if it is not already registered, attempts to load a kernel module for it. The file system operations for the new mount point are taken from vfc_vfsops and mnt_vfc in the Vt mount structure is made to point directly at the Vt vfsconf structure for the file system type. The file system type number is taken from vfc_typenum which was assigned in Fn vfs_register , and the mount flags are taken from a mask of vfc_flags Each time a file system of a given type is mounted, vfc_refcount is incremented.
Fn vfs_register takes a new Vt vfsconf structure and adds it to the list of existing file systems. If the type has not already been registered, it is initialized by calling the Fn vfs_init function in the file system operations vector. Fn vfs_register also updates the oid's of any sysctl nodes for this file system type to be the same as the newly assigned type number.
Fn vfs_unregister unlinks Fa vfc from the list of registered file system types if there are currently no mounted instances. If the Fn vfs_uninit function in the file systems initialization vector is defined, it is called.
Fn vfs_modevent is registered by Fn VFS_SET to handle the loading and unloading of file system kernel modules. In the case of MOD_LOAD Fn vfs_register is called. In the case of MOD_UNLOAD Fn vfs_unregister is called.
RETURN VALUES
Fn vfs_register returns 0 if successful; otherwise, Er EEXIST is returned indicating that the file system type has already been registered.Fn vfs_unregister returns 0 if successful. If no Vt vfsconf entry can be found matching the name in Fa vfc , Er EINVAL is returned. If the reference count of mounted instances of the file system type is not zero, Er EBUSY is returned. If Fn vfs_uninit is called, any errors it returns will be returned by Fn vfs_unregister .
Fn vfs_modevent returns the result of the call to Fn vfs_register or Fn vfs_unregister , whatever the case.