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 + -
显示快捷键?