Changeset View
Changeset View
Standalone View
Standalone View
head/sys/fs/pseudofs/pseudofs.h
Show First 20 Lines • Show All 266 Lines • ▼ Show 20 Lines | struct pfs_node *pfs_create_link(struct pfs_node *parent, const char *name, | ||||
int flags); | int flags); | ||||
struct pfs_node *pfs_find_node (struct pfs_node *parent, const char *name); | struct pfs_node *pfs_find_node (struct pfs_node *parent, const char *name); | ||||
void pfs_purge (struct pfs_node *pn); | void pfs_purge (struct pfs_node *pn); | ||||
int pfs_destroy (struct pfs_node *pn); | int pfs_destroy (struct pfs_node *pn); | ||||
/* | /* | ||||
* Now for some initialization magic... | * Now for some initialization magic... | ||||
*/ | */ | ||||
#define PSEUDOFS(name, version, jflag) \ | #define PSEUDOFS(name, version, flags) \ | ||||
\ | \ | ||||
static struct pfs_info name##_info = { \ | static struct pfs_info name##_info = { \ | ||||
#name, \ | #name, \ | ||||
name##_init, \ | name##_init, \ | ||||
name##_uninit, \ | name##_uninit, \ | ||||
}; \ | }; \ | ||||
\ | \ | ||||
static int \ | static int \ | ||||
_##name##_mount(struct mount *mp) { \ | _##name##_mount(struct mount *mp) { \ | ||||
if (jflag && !prison_allow(curthread->td_ucred, jflag)) \ | |||||
return (EPERM); \ | |||||
return (pfs_mount(&name##_info, mp)); \ | return (pfs_mount(&name##_info, mp)); \ | ||||
} \ | } \ | ||||
\ | \ | ||||
static int \ | static int \ | ||||
_##name##_init(struct vfsconf *vfc) { \ | _##name##_init(struct vfsconf *vfc) { \ | ||||
return (pfs_init(&name##_info, vfc)); \ | return (pfs_init(&name##_info, vfc)); \ | ||||
} \ | } \ | ||||
\ | \ | ||||
static int \ | static int \ | ||||
_##name##_uninit(struct vfsconf *vfc) { \ | _##name##_uninit(struct vfsconf *vfc) { \ | ||||
return (pfs_uninit(&name##_info, vfc)); \ | return (pfs_uninit(&name##_info, vfc)); \ | ||||
} \ | } \ | ||||
\ | \ | ||||
static struct vfsops name##_vfsops = { \ | static struct vfsops name##_vfsops = { \ | ||||
.vfs_cmount = pfs_cmount, \ | .vfs_cmount = pfs_cmount, \ | ||||
.vfs_init = _##name##_init, \ | .vfs_init = _##name##_init, \ | ||||
.vfs_mount = _##name##_mount, \ | .vfs_mount = _##name##_mount, \ | ||||
.vfs_root = pfs_root, \ | .vfs_root = pfs_root, \ | ||||
.vfs_statfs = pfs_statfs, \ | .vfs_statfs = pfs_statfs, \ | ||||
.vfs_uninit = _##name##_uninit, \ | .vfs_uninit = _##name##_uninit, \ | ||||
.vfs_unmount = pfs_unmount, \ | .vfs_unmount = pfs_unmount, \ | ||||
}; \ | }; \ | ||||
VFS_SET(name##_vfsops, name, VFCF_SYNTHETIC | (jflag ? VFCF_JAIL : 0)); \ | VFS_SET(name##_vfsops, name, VFCF_SYNTHETIC | flags); \ | ||||
MODULE_VERSION(name, version); \ | MODULE_VERSION(name, version); \ | ||||
MODULE_DEPEND(name, pseudofs, 1, 1, 1); | MODULE_DEPEND(name, pseudofs, 1, 1, 1); | ||||
#endif | #endif |