VFS_VGET(9)
- NetBSD Manual Pages
VFSOPS(9) NetBSD Kernel Developer's Manual VFSOPS(9)
NAME
vfsops, VFS_MOUNT, VFS_START, VFS_UNMOUNT, VFS_ROOT, VFS_QUOTACTL,
VFS_STATVFS, VFS_SYNC, VFS_VGET, VFS_FHTOVP, VFS_VPTOFH, VFS_SNAPSHOT --
kernel file system interface
SYNOPSIS
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/vnode.h>
int
VFS_MOUNT(struct mount *mp, const char *path, void *data,
struct nameidata *ndp, struct lwp *l);
int
VFS_START(struct mount *mp, int flags, struct lwp *l);
int
VFS_UNMOUNT(struct mount *mp, int mntflags, struct lwp *l);
int
VFS_ROOT(struct mount *mp, struct vnode **vpp);
int
VFS_QUOTACTL(struct mount *mp, int cmds, uid_t uid, caddr_t arg,
struct lwp *l);
int
VFS_STATVFS(struct mount *mp, struct statvfs *sbp, struct lwp *l);
int
VFS_SYNC(struct mount *mp, int waitfor, kauth_cred_t cred,
struct lwp *l);
int
VFS_VGET(struct mount *mp, ino_t ino, struct vnode **vpp);
int
VFS_FHTOVP(struct mount *mp, struct fid *fhp, struct vnode **vpp);
int
VFS_VPTOFH(struct vnode *vp, struct fid *fhp);
int
int
VFS_SNAPSHOT(struct mount *mp, struct vnode *vp, struct timespec *ts);
DESCRIPTION
In a similar fashion to the vnode(9) interface, all operations that are
done on a file system are conducted through a single interface that
allows the system to carry out operations on a file system without know-
ing its construction or type.
All supported file systems in the kernel have an entry in the
vfs_list_initial table. This table is generated by config(1) and is a
NULL-terminated list of vfsops structures. The vfsops structure
describes the operations that can be done to a specific file system type.
The following table lists the elements of the vfsops vector, the corre-
sponding invocation macro, and a description of the element.
Vector element Macro Description
int (*vfs_mount)() VFS_MOUNT Mount a file system
int (*vfs_start)() VFS_START Make operational
int (*vfs_unmount)() VFS_UMOUNT Unmount a file system
int (*vfs_root)() VFS_ROOT Get the file system root vnode
int (*vfs_quotactl)() VFS_QUOTACTL Query/modify space quotas
int (*vfs_statvfs)() VFS_STATVFS Get file system statistics
int (*vfs_sync)() VFS_SYNC Flush file system buffers
int (*vfs_vget)() VFS_VGET Get vnode from file id
int (*vfs_fhtovp)() VFS_FHTOVP NFS file handle to vnode lookup
int (*vfs_vptofh)() VFS_VPTOFH Vnode to NFS file handle lookup
void (*vfs_init)() - Initialise file system
void (*vfs_reinit)() - Reinitialise file system
void (*vfs_done)() - Cleanup unmounted file system
int (*vfs_mountroot)() - Mount the root file system
int (*vfs_snapshot)() VFS_SNAPSHOT Take a snapshot
Some additional non-function members of the vfsops structure are the file
system name vfs_name and a reference count vfs_refcount. It is not
mandatory for a file system type to support a particular operation, but
it must assign each member function pointer to a suitable function to do
the minimum required of it. In most cases, such functions either do
nothing or return an error value to the effect that it is not supported.
vfs_reinit, vfs_mountroot, vfs_fhtovp, and vfs_vptofh may be NULL.
At system boot, each file system with an entry in vfs_list_initial is
established and initialised. Each initialised file system is recorded by
the kernel in the list vfs_list and the file system specific initialisa-
tion function vfs_init in its vfsops vector is invoked. When the file
system is no longer needed vfs_done is invoked to run file system spe-
cific cleanups and the file system is removed from the kernel list.
At system boot, the root filesystem is mounted by invoking the file sys-
tem type specific vfs_mountroot function in the vfsops vector. All
filesystems that can be mounted as a root file system must define this
function. It is responsible for initialising to list of mount structures
for all future mounted file systems.
Kernel state which affects a specific file system type can be queried and
modified using the sysctl(8) interface.
FUNCTIONS
VFS_MOUNT(mp, path, data, ndp, l)
Mount a file system specified by the mount structure mp on the
mount point described by path. The argument data contains file
system type specific data and is read into the kernel using
copyin(9). The argument ndp contains the result of a namei(9)
call on the pathname of the mount point and p is the calling
process. VFS_MOUNT() initialises the mount structure for the
mounted file system. This structure records mount-specific
information for the file system and records the list of vnodes
associated with the file system. This function is invoked both
to mount new file systems and to change the attributes of an
existing file system. If the MNT_UPDATE flag is set in
mp->mnt_flag then the filesystem should update its internal
state from the value of mp->mnt_flag. This can be used, for
instance, to convert a read-only filesystem to read-write. If
the MNT_UPDATE flag is not specified, then this is a newly
mounted filesystem.
VFS_START(mp, flags, l)
Make the file system specified by the mount structure mp opera-
tional. The argument p is the calling process. The argument
flags is a set of flags for controlling the operation of
VFS_START(). This function is invoked after VFS_MOUNT() and
before the first access to the file system.
VFS_UNMOUNT(mp, mntflags, l)
Unmount a file system specified by the mount structure mp. The
argument p is the calling process. VFS_UNMOUNT() performs any
file system type specific operations required before the file
system is unmounted, such are flushing buffers. If MNT_FORCE is
specified in the flags mntflags then open files are forcibly
closed. The function also deallocates space associated with
data structure that were allocated for the file system when it
was mounted.
VFS_ROOT(mp, vpp)
Get the root vnode of the file system specified by the mount
structure mp. The vnode is returned in the address given by
vpp. This function is used by the pathname translation algo-
rithms when a vnode that has been covered by a mounted file sys-
tem is encountered. While resolving the pathname, the pathname
translation algorithm will have to go through the directory tree
in the file system associated with that mount point and there-
fore requires the root vnode of the file system.
VFS_QUOTACTL(mp, cmds, uid, arg, l)
Query/modify user space quotas for the file system specified by
the mount structure mp. The argument specifies the control com-
mand to perform. The userid is specified in id, the calling
process is p and arg allows command-specific data to be returned
to the system call interface. VFS_QUOTACTL() is the file system
type specific implementation of the quotactl(2) system call.
VFS_STATVFS(mp, sbp, l)
Get file system statistics for the file system specified by the
mount structure mp. The argument p is the calling process. A
statvfs structure filled with the statistics is returned in sbp.
VFS_STATVFS() is the file system type specific implementation of
the statvfs(2) and fstatvfs(2) system calls.
VFS_SYNC(mp, waitfor, cred, l)
Flush file system I/O buffers for the file system specified by
the mount structure mp. The waitfor argument indicates whether
a partial flush or complete flush should be performed. The
arguments l and cred specific the calling lwp and its creden-
tials, respectively. VFS_SYNC() does not provide any return
value since the operation can never fail.
VFS_VGET(mp, ino, vpp)
Get vnode for a file system type specific file id ino for the
file system specified by the mount structure mp. The vnode is
returned in the address specified vpp. The function is optional
for file systems which have a unique id number for every file in
the file system. It is used internally by the UFS file system
and also by the NFSv3 server to implement the READDIRPLUS nfs
call. If the file system does not support this function, it
should return EOPNOTSUPP.
VFS_FHTOVP(mp, fhp, vpp)
Get the vnode for the NFS file specified by the file handle fhp
in the file system specified by the mount structure mp. The
locked vnode is returned in vpp.
A call to VFS_FHTOVP() should generally be followed by a call to
nfs_check_export() to check if the file is accessable to the
client.
If this function's pointer is set to NULL, the underlying file
system will not be NFS exportable. If it is defined, though,
VFS_VPTOFH() must be defined too.
VFS_VPTOFH(vp, fhp)
Get a unique NFS file handle for the file specified by the vnode
vp. The file handle is returned in fhp. The contents of the
file handle are defined by the file system and are not examined
by any other subsystems. It should contain enough information
to uniquely identify a file within the file system as well as
noticing when a file has been removed and the file system
resources have been recycled for a new file.
If this function's pointer is set to NULL, the underlying file
system will not be NFS exportable. If it is defined, though,
VFS_FHTOVP() must be defined too.
VFS_SNAPSHOT(mp, vp, ts)
Take a snapshot of the file system specified by the mount struc-
ture mp and make it accessible through the locked vnode vp. If
ts is not NULL it will receive the time this snapshot was taken.
If the file system does not support this function, it should
return EOPNOTSUPP.
CODE REFERENCES
This section describes places within the NetBSD source tree where actual
code implementing or using the vfs operations can be found. All path-
names are relative to /usr/src.
The vfs operations are implemented within the files sys/kern/vfs_subr.c
and sys/kern/vfs_init.c.
SEE ALSO
intro(9), namei(9), vfs(9), vfssubr(9), vnode(9), vnodeops(9)
HISTORY
The vfs operations vector, its functions and the corresponding macros
appeared in 4.3BSD.
NetBSD 4.0 October 4, 2006 NetBSD 4.0
Powered by man-cgi (2024-03-20).
Maintained for NetBSD
by Kimmo Suominen.
Based on man-cgi by Panagiotis Christias.