mount.h
来自「基于组件方式开发操作系统的OSKIT源代码」· C头文件 代码 · 共 453 行 · 第 1/2 页
H
453 行
};/* * Structure holding information for a publicly exported filesystem * (WebNFS). Currently the specs allow just for one such filesystem. */struct nfs_public { int np_valid; /* Do we hold valid information */ fhandle_t np_handle; /* Filehandle for pub fs (internal) */ struct mount *np_mount; /* Mountpoint of exported fs */ char *np_index; /* Index file */};/* * Filesystem configuration information. One of these exists for each * type of filesystem supported by the kernel. These are searched at * mount time to identify the requested filesystem. */struct vfsconf { struct vfsops *vfc_vfsops; /* filesystem operations vector */ char vfc_name[MFSNAMELEN]; /* filesystem type name */ int vfc_typenum; /* historic filesystem type number */ int vfc_refcount; /* number mounted of this type */ int vfc_flags; /* permanent flags */ struct vfsconf *vfc_next; /* next in list */};struct ovfsconf { void *vfc_vfsops; char vfc_name[32]; int vfc_index; int vfc_refcount; int vfc_flags;};/* * NB: these flags refer to IMPLEMENTATION properties, not properties of * any actual mounts; i.e., it does not make sense to change the flags. */#define VFCF_STATIC 0x00010000 /* statically compiled into kernel */#define VFCF_NETWORK 0x00020000 /* may get data over the network */#define VFCF_READONLY 0x00040000 /* writes are not implemented */#define VFCF_SYNTHETIC 0x00080000 /* data does not represent real files */#define VFCF_LOOPBACK 0x00100000 /* aliases some other mounted FS */#define VFCF_UNICODE 0x00200000 /* stores file names as Unicode*/#ifdef KERNEL#ifdef MALLOC_DECLAREMALLOC_DECLARE(M_MOUNT);#endifextern int maxvfsconf; /* highest defined filesystem type */extern int nfs_mount_type; /* vfc_typenum for nfs, or -1 */extern struct vfsconf *vfsconf; /* head of list of filesystem types *//* * Operations supported on mounted file system. */#ifdef __STDC__struct nameidata;struct mbuf;#endifstruct vfsops { int (*vfs_mount) __P((struct mount *mp, char *path, caddr_t data, struct nameidata *ndp, struct proc *p)); int (*vfs_start) __P((struct mount *mp, int flags, struct proc *p)); int (*vfs_unmount) __P((struct mount *mp, int mntflags, struct proc *p)); int (*vfs_root) __P((struct mount *mp, struct vnode **vpp)); int (*vfs_quotactl) __P((struct mount *mp, int cmds, uid_t uid, caddr_t arg, struct proc *p)); int (*vfs_statfs) __P((struct mount *mp, struct statfs *sbp, struct proc *p)); int (*vfs_sync) __P((struct mount *mp, int waitfor, struct ucred *cred, struct proc *p)); int (*vfs_vget) __P((struct mount *mp, ino_t ino, struct vnode **vpp)); int (*vfs_fhtovp) __P((struct mount *mp, struct fid *fhp, struct sockaddr *nam, struct vnode **vpp, int *exflagsp, struct ucred **credanonp)); int (*vfs_vptofh) __P((struct vnode *vp, struct fid *fhp)); int (*vfs_init) __P((struct vfsconf *)); int (*vfs_uninit) __P((struct vfsconf *)); struct sysctl_oid *vfs_oid;};#define VFS_MOUNT(MP, PATH, DATA, NDP, P) \ (*(MP)->mnt_op->vfs_mount)(MP, PATH, DATA, NDP, P)#define VFS_START(MP, FLAGS, P) (*(MP)->mnt_op->vfs_start)(MP, FLAGS, P)#define VFS_UNMOUNT(MP, FORCE, P) (*(MP)->mnt_op->vfs_unmount)(MP, FORCE, P)#define VFS_ROOT(MP, VPP) (*(MP)->mnt_op->vfs_root)(MP, VPP)#define VFS_QUOTACTL(MP,C,U,A,P) (*(MP)->mnt_op->vfs_quotactl)(MP, C, U, A, P)#define VFS_STATFS(MP, SBP, P) (*(MP)->mnt_op->vfs_statfs)(MP, SBP, P)#define VFS_SYNC(MP, WAIT, C, P) (*(MP)->mnt_op->vfs_sync)(MP, WAIT, C, P)#define VFS_VGET(MP, INO, VPP) (*(MP)->mnt_op->vfs_vget)(MP, INO, VPP)#define VFS_FHTOVP(MP, FIDP, NAM, VPP, EXFLG, CRED) \ (*(MP)->mnt_op->vfs_fhtovp)(MP, FIDP, NAM, VPP, EXFLG, CRED)#define VFS_VPTOFH(VP, FIDP) (*(VP)->v_mount->mnt_op->vfs_vptofh)(VP, FIDP)#if defined(VFS_LKM) && !defined(KLD_MODULE)#include <sys/conf.h>#include <sys/exec.h>#include <sys/sysent.h>#include <sys/lkm.h>#define VFS_SET(vfsops, fsname, flags) \ static struct vfsconf _fs_vfsconf = { \ &vfsops, \ #fsname, \ -1, \ 0, \ flags, \ }; \ extern struct linker_set MODVNOPS; \ MOD_VFS(fsname,&MODVNOPS,&_fs_vfsconf); \ int \ fsname ## _mod(struct lkm_table *lkmtp, int cmd, int ver); \ int \ fsname ## _mod(struct lkm_table *lkmtp, int cmd, int ver) { \ MOD_DISPATCH(fsname, \ lkmtp, cmd, ver, lkm_nullcmd, lkm_nullcmd, lkm_nullcmd); } \ struct __hack#else#include <sys/module.h>#define VFS_SET(vfsops, fsname, flags) \ static struct vfsconf fsname ## _vfsconf = { \ &vfsops, \ #fsname, \ -1, \ 0, \ flags \ }; \ static moduledata_t fsname ## _mod = { \ #fsname, \ vfs_modevent, \ & fsname ## _vfsconf \ }; \ DECLARE_MODULE(fsname, fsname ## _mod, SI_SUB_VFS, SI_ORDER_MIDDLE)#endif /* VFS_LKM */#include <net/radix.h>#define AF_MAX 31 /* XXX *//* * Network address lookup element */struct netcred { struct radix_node netc_rnodes[2]; int netc_exflags; struct ucred netc_anon;};/* * Network export information */struct netexport { struct netcred ne_defexported; /* Default export */ struct radix_node_head *ne_rtable[AF_MAX+1]; /* Individual exports */};extern char *mountrootfsname;/* * exported vnode operations */int dounmount __P((struct mount *, int, struct proc *));int vfs_setpublicfs /* set publicly exported fs */ __P((struct mount *, struct netexport *, struct export_args *));int vfs_lock __P((struct mount *)); /* lock a vfs */void vfs_msync __P((struct mount *, int));void vfs_unlock __P((struct mount *)); /* unlock a vfs */int vfs_busy __P((struct mount *, int, struct simplelock *, struct proc *));int vfs_export /* process mount export info */ __P((struct mount *, struct netexport *, struct export_args *));struct netcred *vfs_export_lookup /* lookup host in fs export list */ __P((struct mount *, struct netexport *, struct sockaddr *));int vfs_allocate_syncvnode __P((struct mount *));void vfs_getnewfsid __P((struct mount *));struct mount *vfs_getvfs __P((fsid_t *)); /* return vfs given fsid */int vfs_modevent __P((module_t, int, void *));int vfs_mountedon __P((struct vnode *)); /* is a vfs mounted on vp */int vfs_rootmountalloc __P((char *, char *, struct mount **));void vfs_unbusy __P((struct mount *, struct proc *));void vfs_unmountall __P((void));int vfs_register __P((struct vfsconf *));int vfs_unregister __P((struct vfsconf *));extern CIRCLEQ_HEAD(mntlist, mount) mountlist; /* mounted filesystem list */extern struct simplelock mountlist_slock;extern struct nfs_public nfs_pub;#else /* !KERNEL */#include <sys/cdefs.h>__BEGIN_DECLSint fstatfs __P((int, struct statfs *));int getfh __P((const char *, fhandle_t *));int getfsstat __P((struct statfs *, long, int));int getmntinfo __P((struct statfs **, int));int mount __P((const char *, const char *, int, void *));int statfs __P((const char *, struct statfs *));int unmount __P((const char *, int));/* C library stuff */void endvfsent __P((void));struct ovfsconf *getvfsbyname __P((const char *));struct ovfsconf *getvfsbytype __P((int));struct ovfsconf *getvfsent __P((void));#define getvfsbyname new_getvfsbynameint new_getvfsbyname __P((const char *, struct vfsconf *));void setvfsent __P((int));int vfsisloadable __P((const char *));int vfsload __P((const char *));__END_DECLS#endif /* KERNEL */#endif /* !_SYS_MOUNT_H_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?