#ifndef _SYS_MOUNT_H_
#define _SYS_MOUNT_H_
#include <sys/cdefs.h>
#include <sys/queue.h>
#include <sys/tree.h>
#include <sys/ucred.h>
#ifndef _KERNEL
#if __BSD_VISIBLE
#include <sys/stat.h>
#endif
#endif
#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
#ifndef _SYS_LOCK_H_
#include <sys/lock.h>
#endif
#ifndef _SYS_NAMECACHE_H_
#include <sys/namecache.h>
#endif
#ifndef _SYS_STATVFS_H_
#include <sys/statvfs.h>
#endif
#ifndef _SYS_THREAD_H_
#include <sys/thread.h>
#endif
#include <sys/vfs_quota.h>
#include <sys/mplock2.h>
#endif
struct thread;
struct journal;
struct vop_ops;
struct vop_mountctl_args;
struct statvfs;
struct vmntvnodescan_info;
typedef struct fsid { int32_t val[2]; } fsid_t;
#define fsidcmp(a, b) memcmp((a), (b), sizeof(fsid_t))
#define MAXFIDSZ 16
struct fid {
u_short fid_len;
u_short fid_ext;
char fid_data[MAXFIDSZ];
} __packed;
#define MFSNAMELEN 16
#define MNAMELEN 80
struct statfs {
long f_spare2;
long f_bsize;
long f_iosize;
long f_blocks;
long f_bfree;
long f_bavail;
long f_files;
long f_ffree;
fsid_t f_fsid;
uid_t f_owner;
int f_type;
int f_flags;
long f_syncwrites;
long f_asyncwrites;
char f_fstypename[MFSNAMELEN];
char f_mntonname[MNAMELEN];
long f_syncreads;
long f_asyncreads;
short f_spares1;
char f_mntfromname[MNAMELEN];
short f_spares2;
long f_spare[2];
};
#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
struct buf;
struct bio_ops {
TAILQ_ENTRY(bio_ops) entry;
void (*io_start) (struct buf *);
void (*io_complete) (struct buf *);
void (*io_deallocate) (struct buf *);
int (*io_fsync) (struct vnode *);
int (*io_sync) (struct mount *);
void (*io_movedeps) (struct buf *, struct buf *);
int (*io_countdeps) (struct buf *, int);
int (*io_checkread) (struct buf *);
int (*io_checkwrite) (struct buf *);
};
#endif
#define ACCT_CHUNK_BITS 5
#define ACCT_CHUNK_NIDS (1<<ACCT_CHUNK_BITS)
#define ACCT_CHUNK_MASK (ACCT_CHUNK_NIDS - 1)
struct ac_counters {
uint64_t space;
uint64_t limit;
};
struct ac_unode {
RB_ENTRY(ac_unode) rb_entry;
uid_t left_bits;
struct ac_counters uid_chunk[ACCT_CHUNK_NIDS];
};
struct ac_gnode {
RB_ENTRY(ac_gnode) rb_entry;
gid_t left_bits;
struct ac_counters gid_chunk[ACCT_CHUNK_NIDS];
};
#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
struct vfs_acct {
RB_HEAD(ac_utree,ac_unode) ac_uroot;
RB_HEAD(ac_gtree,ac_gnode) ac_groot;
uint64_t ac_bytes;
uint64_t ac_limit;
struct spinlock ac_spin;
};
TAILQ_HEAD(vnodelst, vnode);
TAILQ_HEAD(journallst, journal);
struct mount {
TAILQ_ENTRY(mount) mnt_list;
struct vfsops *mnt_op;
struct vfsconf *mnt_vfc;
u_int mnt_namecache_gen;
u_int mnt_pbuf_count;
struct vnode *mnt_syncer;
struct syncer_ctx *mnt_syncer_ctx;
struct vnodelst mnt_nvnodelist;
TAILQ_HEAD(,vmntvnodescan_info) mnt_vnodescan_list;
struct lock mnt_lock;
int mnt_flag;
int mnt_kern_flag;
int mnt_maxsymlinklen;
struct statfs mnt_stat;
struct statvfs mnt_vstat;
qaddr_t mnt_data;
time_t mnt_time;
u_int mnt_iosize_max;
struct vnodelst mnt_reservedvnlist;
int mnt_nvnodelistsize;
struct vop_ops *mnt_vn_use_ops;
struct vop_ops *mnt_vn_coherency_ops;
struct vop_ops *mnt_vn_journal_ops;
struct vop_ops *mnt_vn_norm_ops;
struct vop_ops *mnt_vn_spec_ops;
struct vop_ops *mnt_vn_fifo_ops;
struct nchandle mnt_ncmountpt;
struct nchandle mnt_ncmounton;
char mnt_pad[16];
struct ucred *mnt_cred;
int mnt_refs;
int mnt_hold;
struct lwkt_token mnt_token;
struct journallst mnt_jlist;
u_int8_t *mnt_jbitmap;
int16_t mnt_streamid;
struct bio_ops *mnt_bioops;
struct lock mnt_renlock;
struct vfs_acct mnt_acct;
RB_ENTRY(mount) mnt_node;
};
#endif
#define MNT_RDONLY 0x00000001
#define MNT_SYNCHRONOUS 0x00000002
#define MNT_NOEXEC 0x00000004
#define MNT_NOSUID 0x00000008
#define MNT_NODEV 0x00000010
#define MNT_AUTOMOUNTED 0x00000020
#define MNT_ASYNC 0x00000040
#define MNT_SUIDDIR 0x00100000
#define MNT_SOFTDEP 0x00200000
#define MNT_NOSYMFOLLOW 0x00400000
#define MNT_TRIM 0x01000000
#define MNT_NOATIME 0x10000000
#define MNT_NOCLUSTERR 0x40000000
#define MNT_NOCLUSTERW 0x80000000
#define MNT_EXRDONLY 0x00000080
#define MNT_EXPORTED 0x00000100
#define MNT_DEFEXPORTED 0x00000200
#define MNT_EXPORTANON 0x00000400
#define MNT_EXKERB 0x00000800
#define MNT_EXPUBLIC 0x20000000
#define MNT_LOCAL 0x00001000
#define MNT_QUOTA 0x00002000
#define MNT_ROOTFS 0x00004000
#define MNT_USER 0x00008000
#define MNT_IGNORE 0x00800000
#define MNT_VISFLAGMASK (MNT_RDONLY | MNT_SYNCHRONOUS | MNT_NOEXEC | \
MNT_NOSUID | MNT_NODEV | \
MNT_ASYNC | MNT_EXRDONLY | MNT_EXPORTED | \
MNT_DEFEXPORTED | MNT_EXPORTANON| MNT_EXKERB | \
MNT_LOCAL | MNT_USER | MNT_QUOTA | \
MNT_ROOTFS | MNT_NOATIME | MNT_NOCLUSTERR| \
MNT_NOCLUSTERW | MNT_SUIDDIR | MNT_SOFTDEP | \
MNT_IGNORE | MNT_NOSYMFOLLOW | MNT_EXPUBLIC| \
MNT_TRIM | MNT_AUTOMOUNTED)
#define MNT_UPDATE 0x00010000
#define MNT_DELEXPORT 0x00020000
#define MNT_RELOAD 0x00040000
#define MNT_FORCE 0x00080000
#define MNT_CMDFLAGS (MNT_UPDATE|MNT_DELEXPORT|MNT_RELOAD|MNT_FORCE)
#define MNTK_UNMOUNTF 0x00000001
#define MNTK_QUICKHALT 0x00008000
#define MNTK_MPSAFE 0x00010000
#define MNTK_RD_MPSAFE 0x00020000
#define MNTK_WR_MPSAFE 0x00040000
#define MNTK_GA_MPSAFE 0x00080000
#define MNTK_IN_MPSAFE 0x00100000
#define MNTK_SG_MPSAFE 0x00200000
#define MNTK_NCALIASED 0x00800000
#define MNTK_UNMOUNT 0x01000000
#define MNTK_MWAIT 0x02000000
#define MNTK_WANTRDWR 0x04000000
#define MNTK_NOSTKMNT 0x10000000
#define MNTK_NOMSYNC 0x20000000
#define MNTK_THR_SYNC 0x40000000
#define MNTK_ST_MPSAFE 0x80000000
#define MNTK_ALL_MPSAFE (MNTK_MPSAFE | MNTK_RD_MPSAFE | MNTK_WR_MPSAFE | \
MNTK_GA_MPSAFE | MNTK_IN_MPSAFE | MNTK_SG_MPSAFE | \
MNTK_ST_MPSAFE)
#define MNTSCAN_FORWARD 0x0001
#define MNTSCAN_REVERSE 0x0002
#define MNTSCAN_NOBUSY 0x0004
#define MNTSCAN_NOUNLOCK 0x0008
#define MNTINS_FIRST 0x0001
#define MNTINS_LAST 0x0002
#define VFS_VFSCONF 0
#define VFS_GENERIC 0
#define VFS_MAXTYPENUM 1
#define VFS_CONF 2
#define VFS_MPLOCK_DECLARE struct mount *xlock_mp
#define VFS_MPLOCK(mp) VFS_MPLOCK_FLAG(mp, MNTK_MPSAFE)
#define VFS_MPLOCK_FLAG(mp, flag) \
do { \
if (mp->mnt_kern_flag & flag) { \
xlock_mp = NULL; \
} else { \
xlock_mp = (mp); \
get_mplock(); \
lwkt_gettoken(&xlock_mp->mnt_token); \
} \
} while(0)
#define VFS_MPUNLOCK() \
do { \
if (xlock_mp) { \
lwkt_reltoken(&xlock_mp->mnt_token); \
rel_mplock(); \
} \
} while(0)
#define MNT_WAIT 0x0001
#define MNT_NOWAIT 0x0002
#define MNT_LAZY 0x0004
#define VOP_FSYNC_SYSCALL 0x0001
struct fhandle {
fsid_t fh_fsid;
struct fid fh_fid;
};
typedef struct fhandle fhandle_t;
struct export_args {
int ex_flags;
uid_t ex_root;
struct ucred ex_anon;
struct sockaddr *ex_addr;
int ex_addrlen;
struct sockaddr *ex_mask;
int ex_masklen;
char *ex_indexfile;
};
struct nfs_public {
int np_valid;
fhandle_t np_handle;
struct mount *np_mount;
char *np_index;
};
struct vfsconf {
struct vfsops *vfc_vfsops;
char vfc_name[MFSNAMELEN];
int vfc_typenum;
int vfc_refcount;
int vfc_flags;
STAILQ_ENTRY(vfsconf) vfc_next;
};
struct ovfsconf {
void *vfc_vfsops;
char vfc_name[32];
int vfc_index;
int vfc_refcount;
int vfc_flags;
};
#define VFCF_STATIC 0x00010000
#define VFCF_NETWORK 0x00020000
#define VFCF_READONLY 0x00040000
#define VFCF_SYNTHETIC 0x00080000
#define VFCF_LOOPBACK 0x00100000
#define VFCF_UNICODE 0x00200000
#define VFCF_MPSAFE 0x00400000
#define VQ_NOTRESP 0x0001
#define VQ_NEEDAUTH 0x0002
#define VQ_LOWDISK 0x0004
#define VQ_MOUNT 0x0008
#define VQ_UNMOUNT 0x0010
#define VQ_DEAD 0x0020
#define VQ_ASSIST 0x0040
#define VQ_NOTRESPLOCK 0x0080
#define VQ_FLAG0100 0x0100
#define VQ_FLAG0200 0x0200
#define VQ_FLAG0400 0x0400
#define VQ_FLAG0800 0x0800
#define VQ_FLAG1000 0x1000
#define VQ_FLAG2000 0x2000
#define VQ_FLAG4000 0x4000
#define VQ_FLAG8000 0x8000
#ifdef _KERNEL
#ifdef MALLOC_DECLARE
MALLOC_DECLARE(M_MOUNT);
#endif
extern int nfs_mount_type;
struct vfsconf *vfsconf_find_by_name(const char *);
struct vfsconf *vfsconf_find_by_typenum(int);
int vfsconf_get_maxtypenum(void);
int vfsconf_each(int (*)(struct vfsconf *, void *), void *);
#endif
#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
TAILQ_HEAD(mntlist, mount);
struct nlookupdata;
struct mbuf;
typedef int vfs_mount_t(struct mount *mp, char *path, caddr_t data,
struct ucred *cred);
typedef int vfs_start_t(struct mount *mp, int flags);
typedef int vfs_unmount_t(struct mount *mp, int mntflags);
typedef int vfs_root_t(struct mount *mp, struct vnode **vpp);
typedef int vfs_quotactl_t(struct mount *mp, int cmds, uid_t uid, caddr_t arg,
struct ucred *cred);
typedef int vfs_statfs_t(struct mount *mp, struct statfs *sbp,
struct ucred *cred);
typedef int vfs_statvfs_t(struct mount *mp, struct statvfs *sbp,
struct ucred *cred);
typedef int vfs_sync_t(struct mount *mp, int waitfor);
typedef int vfs_vget_t(struct mount *mp, struct vnode *dvp,
ino_t ino, struct vnode **vpp);
typedef int vfs_fhtovp_t(struct mount *mp, struct vnode *rootvp,
struct fid *fhp, struct vnode **vpp);
typedef int vfs_checkexp_t(struct mount *mp, struct sockaddr *nam,
int *extflagsp, struct ucred **credanonp);
typedef int vfs_vptofh_t(struct vnode *vp, struct fid *fhp);
typedef int vfs_init_t(struct vfsconf *);
typedef int vfs_uninit_t(struct vfsconf *);
typedef int vfs_extattrctl_t(struct mount *mp, int cmd, struct vnode *vp,
int attrnamespace, const char *attrname,
struct ucred *cred);
typedef int vfs_acinit_t(struct mount *mp);
typedef void vfs_acdone_t(struct mount *mp);
typedef void vfs_account_t(struct mount *mp,
uid_t uid, gid_t gid, int64_t delta);
typedef void vfs_ncpgen_set_t(struct mount *mp, struct namecache *ncp);
typedef int vfs_ncpgen_test_t(struct mount *mp, struct namecache *ncp);
typedef int vfs_modifying_t(struct mount *mp);
int vfs_mount(struct mount *mp, char *path, caddr_t data, struct ucred *cred);
int vfs_start(struct mount *mp, int flags);
int vfs_unmount(struct mount *mp, int mntflags);
int vfs_root(struct mount *mp, struct vnode **vpp);
int vfs_quotactl(struct mount *mp, int cmds, uid_t uid, caddr_t arg,
struct ucred *cred);
int vfs_statfs(struct mount *mp, struct statfs *sbp, struct ucred *cred);
int vfs_statvfs(struct mount *mp, struct statvfs *sbp, struct ucred *cred);
int vfs_sync(struct mount *mp, int waitfor);
int vfs_vget(struct mount *mp, struct vnode *dvp,
ino_t ino, struct vnode **vpp);
int vfs_fhtovp(struct mount *mp, struct vnode *rootvp,
struct fid *fhp, struct vnode **vpp);
int vfs_checkexp(struct mount *mp, struct sockaddr *nam,
int *extflagsp, struct ucred **credanonp);
int vfs_vptofh(struct vnode *vp, struct fid *fhp);
int vfs_init(struct vfsconf *vfc);
int vfs_uninit(struct vfsconf *vfc, struct vfsconf *vfsp);
int vfs_extattrctl(struct mount *mp, int cmd, struct vnode *vp,
int attrnamespace, const char *attrname,
struct ucred *cred);
int vfs_modifying(struct mount *mp);
struct vfsops {
long vfs_flags;
vfs_mount_t *vfs_mount;
vfs_start_t *vfs_start;
vfs_unmount_t *vfs_unmount;
vfs_root_t *vfs_root;
vfs_quotactl_t *vfs_quotactl;
vfs_statfs_t *vfs_statfs;
vfs_sync_t *vfs_sync;
vfs_vget_t *vfs_vget;
vfs_fhtovp_t *vfs_fhtovp;
vfs_checkexp_t *vfs_checkexp;
vfs_vptofh_t *vfs_vptofh;
vfs_init_t *vfs_init;
vfs_uninit_t *vfs_uninit;
vfs_extattrctl_t *vfs_extattrctl;
vfs_statvfs_t *vfs_statvfs;
vfs_acinit_t *vfs_acinit;
vfs_acdone_t *vfs_acdone;
vfs_account_t *vfs_account;
vfs_ncpgen_set_t *vfs_ncpgen_set;
vfs_ncpgen_test_t *vfs_ncpgen_test;
vfs_modifying_t *vfs_modifying;
};
#define VFSOPSF_NOSYNCERTHR 0x00000001
#define VFS_MOUNT(MP, PATH, DATA, CRED) \
vfs_mount(MP, PATH, DATA, CRED)
#define VFS_START(MP, FLAGS) \
vfs_start(MP, FLAGS)
#define VFS_UNMOUNT(MP, FORCE) \
vfs_unmount(MP, FORCE)
#define VFS_ROOT(MP, VPP) \
vfs_root(MP, VPP)
#define VFS_QUOTACTL(MP, C, U, A, CRED) \
vfs_quotactl(MP, C, U, A, CRED)
#define VFS_STATFS(MP, SBP, CRED) \
vfs_statfs(MP, SBP, CRED)
#define VFS_STATVFS(MP, SBP, CRED) \
vfs_statvfs(MP, SBP, CRED)
#define VFS_SYNC(MP, WAIT) \
vfs_sync(MP, WAIT)
#define VFS_VGET(MP, DVP, INO, VPP) \
vfs_vget(MP, DVP, INO, VPP)
#define VFS_FHTOVP(MP, ROOTVP, FIDP, VPP) \
vfs_fhtovp(MP, ROOTVP, FIDP, VPP)
#define VFS_VPTOFH(VP, FIDP) \
vfs_vptofh(VP, FIDP)
#define VFS_CHECKEXP(MP, NAM, EXFLG, CRED) \
vfs_checkexp(MP, NAM, EXFLG, CRED)
#define VFS_EXTATTRCTL(MP, C, FVP, NS, N, CRED) \
vfs_extattrctl(MP, C, FVP, NS, N, CRED)
#define VFS_ACCOUNT(MP, U, G, D) \
if ((MP->mnt_op->vfs_account != NULL) && (D != 0)) \
MP->mnt_op->vfs_account(MP, U, G, D);
#define VFS_ACINIT(MP, ERROR) \
if (vfs_quota_enabled && MP->mnt_op->vfs_acinit != NULL) \
ERROR = MP->mnt_op->vfs_acinit(MP);
#define VFS_ACDONE(MP) \
if (vfs_quota_enabled && MP->mnt_op->vfs_acdone != NULL) \
MP->mnt_op->vfs_acdone(MP);
#define VFS_NCPGEN_SET(MP, NCP) \
MP->mnt_op->vfs_ncpgen_set(MP, NCP)
#define VFS_NCPGEN_TEST(MP, NCP) \
MP->mnt_op->vfs_ncpgen_test(MP, NCP)
#define VFS_MODIFYING(MP) \
MP->mnt_op->vfs_modifying(MP)
#endif
#ifdef _KERNEL
#include <sys/module.h>
#define VFS_SET(vfsops, fsname, flags) \
static struct vfsconf fsname ## _vfsconf = { \
&vfsops, \
#fsname, \
-1, \
0, \
flags, \
{ NULL }, \
}; \
static moduledata_t fsname ## _mod = { \
#fsname, \
vfs_modevent, \
& fsname ## _vfsconf \
}; \
DECLARE_MODULE(fsname, fsname ## _mod, SI_SUB_VFS, SI_ORDER_MIDDLE)
#endif
#if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
#include <net/radix.h>
struct netcred {
struct radix_node netc_rnodes[2];
int netc_exflags;
struct ucred netc_anon;
};
struct netexport {
struct netcred ne_defexported;
struct radix_node_head *ne_inethead;
struct radix_node_head *ne_inet6head;
struct radix_node_head *ne_maskhead;
};
#define NE_LOCK(nep) lwkt_getpooltoken(nep)
#define NE_UNLOCK(nep) lwkt_relpooltoken(nep)
#define NE_ASSERT_LOCKED(nep) \
ASSERT_LWKT_TOKEN_HELD(lwkt_token_pool_lookup(nep))
#endif
#ifdef _KERNEL
void mount_hold(struct mount *);
void mount_drop(struct mount *);
int dounmount (struct mount *, int, int);
int vfs_setpublicfs
(struct mount *, struct netexport *, const struct export_args *);
int vfs_lock (struct mount *);
void vfs_msync (struct mount *, int);
void vfs_unlock (struct mount *);
int vfs_busy (struct mount *, int);
int vfs_export
(struct mount *, struct netexport *, const struct export_args *);
struct netcred *vfs_export_lookup
(struct mount *, struct netexport *, struct sockaddr *);
int vfs_allocate_syncvnode (struct mount *);
void vfs_getnewfsid (struct mount *);
void vfs_setfsid(struct mount *mp, fsid_t *template);
cdev_t vfs_getrootfsid (struct mount *);
struct mount *vfs_getvfs (fsid_t *);
int vfs_modevent (module_t, int, void *);
int vfs_mountedon (struct vnode *);
int vfs_rootmountalloc (char *, char *, struct mount **);
void vfs_unbusy (struct mount *);
void vfs_unmountall (int halting);
int vfs_register (struct vfsconf *);
int vfs_unregister (struct vfsconf *);
extern struct nfs_public nfs_pub;
vfs_start_t vfs_stdstart;
vfs_root_t vfs_stdroot;
vfs_quotactl_t vfs_stdquotactl;
vfs_statfs_t vfs_stdstatfs;
vfs_statvfs_t vfs_stdstatvfs;
vfs_sync_t vfs_stdsync;
vfs_sync_t vfs_stdnosync;
vfs_vget_t vfs_stdvget;
vfs_fhtovp_t vfs_stdfhtovp;
vfs_checkexp_t vfs_stdcheckexp;
vfs_vptofh_t vfs_stdvptofh;
vfs_init_t vfs_stdinit;
vfs_uninit_t vfs_stduninit;
vfs_extattrctl_t vfs_stdextattrctl;
vfs_acinit_t vfs_stdac_init;
vfs_acdone_t vfs_stdac_done;
vfs_account_t vfs_stdaccount;
vfs_account_t vfs_noaccount;
vfs_ncpgen_set_t vfs_stdncpgen_set;
vfs_ncpgen_test_t vfs_stdncpgen_test;
vfs_modifying_t vfs_stdmodifying;
struct vop_access_args;
int vop_helper_access(struct vop_access_args *ap, uid_t ino_uid, gid_t ino_gid,
mode_t ino_mode, u_int32_t ino_flags);
int vop_helper_setattr_flags(u_int32_t *ino_flags, u_int32_t vaflags,
uid_t uid, struct ucred *cred);
uid_t vop_helper_create_uid(struct mount *mp, mode_t dmode, uid_t duid,
struct ucred *cred, mode_t *modep);
int vop_helper_chmod(struct vnode *vp, mode_t new_mode, struct ucred *cred,
uid_t cur_uid, gid_t cur_gid, mode_t *cur_modep);
int vop_helper_chown(struct vnode *vp, uid_t new_uid, gid_t new_gid,
struct ucred *cred,
uid_t *cur_uidp, gid_t *cur_gidp, mode_t *cur_modep);
int vop_helper_read_shortcut(struct vop_read_args *ap);
void add_bio_ops(struct bio_ops *ops);
void rem_bio_ops(struct bio_ops *ops);
int journal_mountctl(struct vop_mountctl_args *ap);
void journal_remove_all_journals(struct mount *mp, int flags);
void mountlist_insert(struct mount *, int);
int mountlist_interlock(int (*callback)(struct mount *), struct mount *);
struct mount *mountlist_boot_getfirst(void);
void mountlist_remove(struct mount *mp);
int mountlist_exists(struct mount *mp);
int mountlist_scan(int (*callback)(struct mount *, void *), void *, int);
struct mount *mount_get_by_nc(struct namecache *ncp);
#else
__BEGIN_DECLS
int fstatfs (int, struct statfs *);
int getfh (const char *, fhandle_t *);
int getfsstat (struct statfs *, long, int);
int getmntinfo (struct statfs **, int);
int getmntvinfo (struct statfs **, struct statvfs **, int);
int mount (const char *, const char *, int, void *);
int statfs (const char *, struct statfs *);
int unmount (const char *, int);
int fhopen (const struct fhandle *, int);
int fhstat (const struct fhandle *, struct stat *);
int fhstatfs (const struct fhandle *, struct statfs *);
void endvfsent (void);
struct ovfsconf *getvfsbyname (const char *);
struct ovfsconf *getvfsbytype (int);
struct ovfsconf *getvfsent (void);
#define getvfsbyname new_getvfsbyname
int new_getvfsbyname (const char *, struct vfsconf *);
void setvfsent (int);
int vfsisloadable (const char *);
int vfsload (const char *);
__END_DECLS
#endif
#endif