|
FreeBSD kernel kern code
|
#include <sys/cdefs.h>#include <sys/param.h>#include <sys/conf.h>#include <sys/fcntl.h>#include <sys/jail.h>#include <sys/kernel.h>#include <sys/libkern.h>#include <sys/malloc.h>#include <sys/mount.h>#include <sys/mutex.h>#include <sys/namei.h>#include <sys/priv.h>#include <sys/proc.h>#include <sys/filedesc.h>#include <sys/reboot.h>#include <sys/sbuf.h>#include <sys/syscallsubr.h>#include <sys/sysproto.h>#include <sys/sx.h>#include <sys/sysctl.h>#include <sys/sysent.h>#include <sys/systm.h>#include <sys/vnode.h>#include <vm/uma.h>#include <geom/geom.h>#include <machine/stdarg.h>#include <security/audit/audit.h>#include <security/mac/mac_framework.h>
Go to the source code of this file.
Data Structures | |
| struct | mount_args |
| struct | unmount_args |
| struct | mntaarg |
| struct | mntarg |
Macros | |
| #define | VFS_MOUNTARG_SIZE_MAX (1024 * 64) |
Functions | |
| __FBSDID ("$BSDSUniX$") | |
| static int | vfs_domount (struct thread *td, const char *fstype, char *fspath, uint64_t fsflags, struct vfsoptlist **optlist) |
| static void | free_mntarg (struct mntarg *ma) |
| SYSCTL_INT (_vfs, OID_AUTO, usermount, CTLFLAG_RW,&usermount, 0,"Unprivileged users may mount and unmount file systems") | |
| MALLOC_DEFINE (M_MOUNT,"mount","vfs mount structure") | |
| MTX_SYSINIT (mountlist,&mountlist_mtx,"mountlist", MTX_DEF) | |
| static int | mount_init (void *mem, int size, int flags) |
| static void | mount_fini (void *mem, int size) |
| static void | vfs_mount_init (void *dummy __unused) |
| SYSINIT (vfs_mount, SI_SUB_VFS, SI_ORDER_ANY, vfs_mount_init, NULL) | |
| static void | vfs_freeopt (struct vfsoptlist *opts, struct vfsopt *opt) |
| void | vfs_freeopts (struct vfsoptlist *opts) |
| void | vfs_deleteopt (struct vfsoptlist *opts, const char *name) |
| static int | vfs_isopt_ro (const char *opt) |
| static int | vfs_isopt_rw (const char *opt) |
| static int | vfs_equalopts (const char *opt1, const char *opt2) |
| static void | vfs_sanitizeopts (struct vfsoptlist *opts) |
| int | vfs_buildopts (struct uio *auio, struct vfsoptlist **options) |
| static void | vfs_mergeopts (struct vfsoptlist *toopts, struct vfsoptlist *oldopts) |
| int | sys_nmount (struct thread *td, struct nmount_args *uap) |
| void | vfs_ref (struct mount *mp) |
| void | vfs_rel (struct mount *mp) |
| struct mount * | vfs_mount_alloc (struct vnode *vp, struct vfsconf *vfsp, const char *fspath, struct ucred *cred) |
| void | vfs_mount_destroy (struct mount *mp) |
| int | vfs_donmount (struct thread *td, uint64_t fsflags, struct uio *fsoptions) |
| int | sys_mount (struct thread *td, struct mount_args *uap) |
| static int | vfs_domount_first (struct thread *td, struct vfsconf *vfsp, char *fspath, struct vnode *vp, uint64_t fsflags, struct vfsoptlist **optlist) |
| static int | vfs_domount_update (struct thread *td, struct vnode *vp, uint64_t fsflags, struct vfsoptlist **optlist) |
| int | sys_unmount (struct thread *td, struct unmount_args *uap) |
| int | dounmount (struct mount *mp, int flags, struct thread *td) |
| void | vfs_mount_error (struct mount *mp, const char *fmt,...) |
| void | vfs_opterror (struct vfsoptlist *opts, const char *fmt,...) |
| int | vfs_filteropt (struct vfsoptlist *opts, const char **legal) |
| int | vfs_getopt (struct vfsoptlist *opts, const char *name, void **buf, int *len) |
| int | vfs_getopt_pos (struct vfsoptlist *opts, const char *name) |
| char * | vfs_getopts (struct vfsoptlist *opts, const char *name, int *error) |
| int | vfs_flagopt (struct vfsoptlist *opts, const char *name, uint64_t *w, uint64_t val) |
| int | vfs_scanopt (struct vfsoptlist *opts, const char *name, const char *fmt,...) |
| int | vfs_setopt (struct vfsoptlist *opts, const char *name, void *value, int len) |
| int | vfs_setopt_part (struct vfsoptlist *opts, const char *name, void *value, int len) |
| int | vfs_setopts (struct vfsoptlist *opts, const char *name, const char *value) |
| int | vfs_copyopt (struct vfsoptlist *opts, const char *name, void *dest, int len) |
| MALLOC_DECLARE (M_VNODE_MARKER) | |
| struct vnode * | __mnt_vnode_next (struct vnode **mvp, struct mount *mp) |
| struct vnode * | __mnt_vnode_first (struct vnode **mvp, struct mount *mp) |
| void | __mnt_vnode_markerfree (struct vnode **mvp, struct mount *mp) |
| int | __vfs_statfs (struct mount *mp, struct statfs *sbp) |
| void | vfs_mountedfrom (struct mount *mp, const char *from) |
| 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) |
| struct mntarg * | mount_arg (struct mntarg *ma, const char *name, const void *val, int len) |
| int | kernel_mount (struct mntarg *ma, uint64_t flags) |
| int | kernel_vmount (int flags,...) |
| void | vfs_oexport_conv (const struct oexport_args *oexp, struct export_args *exp) |
Variables | |
| static int | usermount = 0 |
| static uma_zone_t | mount_zone |
| struct mntlist | mountlist = TAILQ_HEAD_INITIALIZER(mountlist) |
| struct mtx | mountlist_mtx |
| static const char * | global_opts [] |
| #define VFS_MOUNTARG_SIZE_MAX (1024 * 64) |
Definition at line 71 of file vfs_mount.c.
Referenced by vfs_buildopts().
| __FBSDID | ( | "$BSDSUniX$" | ) |
| struct vnode* __mnt_vnode_first | ( | struct vnode ** | mvp, |
| struct mount * | mp | ||
| ) |
Definition at line 1708 of file vfs_mount.c.
References free(), and malloc().

| void __mnt_vnode_markerfree | ( | struct vnode ** | mvp, |
| struct mount * | mp | ||
| ) |
Definition at line 1751 of file vfs_mount.c.
References free().
Referenced by __mnt_vnode_next().


| struct vnode* __mnt_vnode_next | ( | struct vnode ** | mvp, |
| struct mount * | mp | ||
| ) |
Definition at line 1681 of file vfs_mount.c.
References __mnt_vnode_markerfree(), kern_yield(), and should_yield().

| int __vfs_statfs | ( | struct mount * | mp, |
| struct statfs * | sbp | ||
| ) |
Definition at line 1769 of file vfs_mount.c.
| int dounmount | ( | struct mount * | mp, |
| int | flags, | ||
| struct thread * | td | ||
| ) |
Definition at line 1224 of file vfs_mount.c.
References cache_purgevfs(), Giant, mountcheckdirs(), mountlist, mountlist_mtx, rootvnode, vdrop(), vfs_allocate_syncvnode(), vfs_deallocate_syncvnode(), vfs_event_signal(), vfs_mount_destroy(), vfs_msync(), vfs_setpublicfs(), vfs_suser(), vholdl(), vn_finished_write(), vn_start_write(), vput(), vref(), vrele(), and wakeup().
Referenced by sys_unmount(), and vfs_unmountall().


|
static |
Definition at line 1929 of file vfs_mount.c.
References free(), and mntarg::v.
Referenced by kernel_mount().


| int kernel_mount | ( | struct mntarg * | ma, |
| uint64_t | flags | ||
| ) |
Definition at line 1946 of file vfs_mount.c.
References mntarg::error, free_mntarg(), mntarg::len, mntarg::v, and vfs_donmount().
Referenced by kernel_vmount(), and parse_mount().


| int kernel_vmount | ( | int | flags, |
| ... | |||
| ) |
Definition at line 1970 of file vfs_mount.c.
References mntarg::error, kernel_mount(), and mount_arg().

| MALLOC_DECLARE | ( | M_VNODE_MARKER | ) |
| MALLOC_DEFINE | ( | M_MOUNT | , |
| "mount" | , | ||
| "vfs mount structure" | |||
| ) |
Definition at line 1900 of file vfs_mount.c.
References mntarg::error, mntarg::len, malloc(), name, realloc(), and mntarg::v.
Referenced by kernel_vmount(), mount_argb(), mount_argsu(), parse_mount(), and parse_mountroot_options().


Definition at line 1819 of file vfs_mount.c.
References mount_arg().
Referenced by sys_mount().


Definition at line 1832 of file vfs_mount.c.
References mntarg::error, mntarg::len, malloc(), name, realloc(), sbuf_data(), sbuf_delete(), sbuf_finish(), sbuf_len(), sbuf_vprintf(), and mntarg::v.

Definition at line 1874 of file vfs_mount.c.
References mntarg::error, malloc(), and mount_arg().
Referenced by sys_mount().


|
static |
Definition at line 117 of file vfs_mount.c.
References lockdestroy(), and mtx_destroy().
Referenced by vfs_mount_init().


|
static |
Definition at line 106 of file vfs_mount.c.
References lockinit(), and mtx_init().
Referenced by vfs_mount_init().


| MTX_SYSINIT | ( | mountlist | , |
| & | mountlist_mtx, | ||
| "mountlist" | , | ||
| MTX_DEF | |||
| ) |
| int sys_mount | ( | struct thread * | td, |
| struct mount_args * | uap | ||
| ) |
Definition at line 698 of file vfs_mount.c.
References mount_args::data, mntarg::error, mount_args::flags, free(), Giant, malloc(), mount_argb(), mount_argsu(), mount_args::path, mount_args::type, vfs_byname_kld(), and vfsconf.

| int sys_nmount | ( | struct thread * | td, |
| struct nmount_args * | uap | ||
| ) |
Definition at line 367 of file vfs_mount.c.
References copyinuio(), free(), and vfs_donmount().

| int sys_unmount | ( | struct thread * | td, |
| struct unmount_args * | uap | ||
| ) |
Definition at line 1131 of file vfs_mount.c.
References dounmount(), free(), Giant, jailed(), malloc(), mountlist, mountlist_mtx, namei(), NDFREE(), priv_check(), sscanf(), usermount, vn_path_to_global_path(), and vput().

| SYSCTL_INT | ( | _vfs | , |
| OID_AUTO | , | ||
| usermount | , | ||
| CTLFLAG_RW | , | ||
| & | usermount, | ||
| 0 | , | ||
| "Unprivileged users may mount and unmount file systems" | |||
| ) |
| SYSINIT | ( | vfs_mount | , |
| SI_SUB_VFS | , | ||
| SI_ORDER_ANY | , | ||
| vfs_mount_init | , | ||
| NULL | |||
| ) |
| int vfs_buildopts | ( | struct uio * | auio, |
| struct vfsoptlist ** | options | ||
| ) |
Definition at line 260 of file vfs_mount.c.
References malloc(), vfs_freeopts(), VFS_MOUNTARG_SIZE_MAX, and vfs_sanitizeopts().
Referenced by kern_jail_get(), kern_jail_set(), and vfs_donmount().


| int vfs_copyopt | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| void * | dest, | ||
| int | len | ||
| ) |
Definition at line 1649 of file vfs_mount.c.
Referenced by kern_jail_get(), kern_jail_set(), and vfs_domount_update().

| void vfs_deleteopt | ( | struct vfsoptlist * | opts, |
| const char * | name | ||
| ) |
Definition at line 166 of file vfs_mount.c.
References vfs_freeopt().
Referenced by vfs_export().


|
static |
Definition at line 1023 of file vfs_mount.c.
References free(), Giant, jailed(), malloc(), namei(), NDFREE(), priv_check(), usermount, vfs_byname(), vfs_byname_kld(), vfs_domount_first(), vfs_domount_update(), vfsconf, and vn_path_to_global_path().
Referenced by vfs_donmount().


|
static |
Definition at line 766 of file vfs_mount.c.
References cache_purge(), Giant, mountcheckdirs(), mountlist, mountlist_mtx, panic(), priv_check_cred(), vfs_allocate_syncvnode(), vfs_event_signal(), vfs_freeopts(), vfs_mount_alloc(), vfs_mount_destroy(), vfs_unbusy(), vinvalbuf(), vput(), and vrele().
Referenced by vfs_domount().


|
static |
Definition at line 878 of file vfs_mount.c.
References flag, Giant, vfs_allocate_syncvnode(), vfs_busy(), vfs_copyopt(), vfs_deallocate_syncvnode(), vfs_export(), vfs_freeopts(), vfs_mergeopts(), vfs_suser(), vfs_unbusy(), vput(), and vrele().
Referenced by vfs_domount().


| int vfs_donmount | ( | struct thread * | td, |
| uint64_t | fsflags, | ||
| struct uio * | fsoptions | ||
| ) |
Definition at line 534 of file vfs_mount.c.
References free(), vfs_buildopts(), vfs_domount(), vfs_freeopt(), vfs_freeopts(), vfs_getopt(), and vfs_getopt_pos().
Referenced by kernel_mount(), and sys_nmount().


|
static |
Definition at line 201 of file vfs_mount.c.
References vfs_isopt_ro(), and vfs_isopt_rw().
Referenced by vfs_sanitizeopts().


| int vfs_filteropt | ( | struct vfsoptlist * | opts, |
| const char ** | legal | ||
| ) |
Definition at line 1416 of file vfs_mount.c.
References global_opts, printf(), and snprintf().

| int vfs_flagopt | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| uint64_t * | w, | ||
| uint64_t | val | ||
| ) |
Definition at line 1536 of file vfs_mount.c.
Referenced by kern_jail_set().

|
static |
Definition at line 142 of file vfs_mount.c.
References free().
Referenced by vfs_deleteopt(), vfs_donmount(), vfs_freeopts(), and vfs_sanitizeopts().


| void vfs_freeopts | ( | struct vfsoptlist * | opts | ) |
Definition at line 154 of file vfs_mount.c.
References free(), and vfs_freeopt().
Referenced by kern_jail_get(), kern_jail_set(), vfs_buildopts(), vfs_domount_first(), vfs_domount_update(), vfs_donmount(), and vfs_mount_destroy().


| int vfs_getopt | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| void ** | buf, | ||
| int * | len | ||
| ) |
Definition at line 1474 of file vfs_mount.c.
Referenced by kern_jail_get(), kern_jail_set(), vfs_donmount(), vfs_mount_error(), and vfs_opterror().

| int vfs_getopt_pos | ( | struct vfsoptlist * | opts, |
| const char * | name | ||
| ) |
Definition at line 1498 of file vfs_mount.c.
Referenced by kern_jail_get(), kern_jail_set(), and vfs_donmount().

| char* vfs_getopts | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| int * | error | ||
| ) |
Definition at line 1515 of file vfs_mount.c.
|
static |
Definition at line 179 of file vfs_mount.c.
Referenced by vfs_equalopts().

|
static |
Definition at line 189 of file vfs_mount.c.
Referenced by vfs_equalopts().

|
static |
Definition at line 344 of file vfs_mount.c.
References malloc(), and vfs_sanitizeopts().
Referenced by vfs_domount_update().


| struct mount* vfs_mount_alloc | ( | struct vnode * | vp, |
| struct vfsconf * | vfsp, | ||
| const char * | fspath, | ||
| struct ucred * | cred | ||
| ) |
Definition at line 452 of file vfs_mount.c.
References crdup(), mount_zone, and vfs_busy().
Referenced by vfs_domount_first(), and vfs_mountroot_devfs().


| void vfs_mount_destroy | ( | struct mount * | mp | ) |
Definition at line 490 of file vfs_mount.c.
References crfree(), mount_zone, panic(), vfs_freeopts(), and wakeup().
Referenced by dounmount(), and vfs_domount_first().


| void vfs_mount_error | ( | struct mount * | mp, |
| const char * | fmt, | ||
| ... | |||
| ) |
Definition at line 1375 of file vfs_mount.c.
References vfs_getopt(), and vsnprintf().
Referenced by vfs_hang_addrlist().


|
static |
Definition at line 127 of file vfs_mount.c.
References mount_fini(), mount_init(), and mount_zone.

| void vfs_mountedfrom | ( | struct mount * | mp, |
| const char * | from | ||
| ) |
Definition at line 1780 of file vfs_mount.c.
Referenced by mqfs_mount().

| void vfs_oexport_conv | ( | const struct oexport_args * | oexp, |
| struct export_args * | exp | ||
| ) |
Definition at line 1993 of file vfs_mount.c.
| void vfs_opterror | ( | struct vfsoptlist * | opts, |
| const char * | fmt, | ||
| ... | |||
| ) |
Definition at line 1392 of file vfs_mount.c.
References vfs_getopt(), and vsnprintf().
Referenced by kern_jail_get(), and kern_jail_set().


| void vfs_ref | ( | struct mount * | mp | ) |
Definition at line 429 of file vfs_mount.c.
Referenced by kern_fstatfs(), kern_statfs(), sys_fhopen(), sys_quotactl(), vfs_getvfs(), vn_vget_ino(), and vop_stdgetwritemount().

| void vfs_rel | ( | struct mount * | mp | ) |
Definition at line 439 of file vfs_mount.c.
Referenced by kern_fstatfs(), kern_statfs(), sys_fhopen(), sys_quotactl(), sysctl_vfs_ctl(), vfs_getnewfsid(), vn_start_secondary_write(), vn_vget_ino(), and vop_stdgetwritemount().

|
static |
Definition at line 238 of file vfs_mount.c.
References vfs_equalopts(), and vfs_freeopt().
Referenced by vfs_buildopts(), and vfs_mergeopts().


| int vfs_scanopt | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| const char * | fmt, | ||
| ... | |||
| ) |
Definition at line 1555 of file vfs_mount.c.
References vsscanf().

| int vfs_setopt | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| void * | value, | ||
| int | len | ||
| ) |
Definition at line 1580 of file vfs_mount.c.
Referenced by kern_jail_get().

| int vfs_setopt_part | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| void * | value, | ||
| int | len | ||
| ) |
Definition at line 1601 of file vfs_mount.c.
Referenced by kern_jail_get().

| int vfs_setopts | ( | struct vfsoptlist * | opts, |
| const char * | name, | ||
| const char * | value | ||
| ) |
Definition at line 1623 of file vfs_mount.c.
Referenced by kern_jail_get().

|
static |
Definition at line 94 of file vfs_mount.c.
Referenced by vfs_filteropt().
|
static |
Definition at line 82 of file vfs_mount.c.
Referenced by vfs_mount_alloc(), vfs_mount_destroy(), and vfs_mount_init().
| struct mntlist mountlist = TAILQ_HEAD_INITIALIZER(mountlist) |
Definition at line 85 of file vfs_mount.c.
Referenced by dounmount(), kern_getfsstat(), kern_reboot(), set_rootvnode(), sys_sync(), sys_unmount(), vfs_busyfs(), vfs_domount_first(), vfs_getvfs(), vfs_mountroot(), vfs_mountroot_devfs(), vfs_mountroot_shuffle(), vfs_unmountall(), and vnlru_proc().
| struct mtx mountlist_mtx |
Definition at line 88 of file vfs_mount.c.
Referenced by dounmount(), kern_getfsstat(), sys_sync(), sys_unmount(), vfs_busy(), vfs_busyfs(), vfs_domount_first(), vfs_getvfs(), vfs_mountroot(), vfs_mountroot_devfs(), vfs_mountroot_shuffle(), and vnlru_proc().
|
static |
Definition at line 77 of file vfs_mount.c.
Referenced by sys_unmount(), and vfs_domount().