Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/fuse/fuse_main.c
Show First 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | |||||
static void fuse_bringdown(eventhandler_tag eh_tag); | static void fuse_bringdown(eventhandler_tag eh_tag); | ||||
static int fuse_loader(struct module *m, int what, void *arg); | static int fuse_loader(struct module *m, int what, void *arg); | ||||
struct mtx fuse_mtx; | struct mtx fuse_mtx; | ||||
extern struct vfsops fuse_vfsops; | extern struct vfsops fuse_vfsops; | ||||
extern struct cdevsw fuse_cdevsw; | extern struct cdevsw fuse_cdevsw; | ||||
extern struct vop_vector fuse_vnops; | extern struct vop_vector fuse_vnops; | ||||
extern int fuse_pbuf_freecnt; | extern uma_zone_t fuse_pbuf_zone; | ||||
static struct vfsconf fuse_vfsconf = { | static struct vfsconf fuse_vfsconf = { | ||||
.vfc_version = VFS_VERSION, | .vfc_version = VFS_VERSION, | ||||
.vfc_name = "fusefs", | .vfc_name = "fusefs", | ||||
.vfc_vfsops = &fuse_vfsops, | .vfc_vfsops = &fuse_vfsops, | ||||
.vfc_typenum = -1, | .vfc_typenum = -1, | ||||
.vfc_flags = VFCF_JAIL | VFCF_SYNTHETIC | .vfc_flags = VFCF_JAIL | VFCF_SYNTHETIC | ||||
}; | }; | ||||
Show All 21 Lines | |||||
static int | static int | ||||
fuse_loader(struct module *m, int what, void *arg) | fuse_loader(struct module *m, int what, void *arg) | ||||
{ | { | ||||
static eventhandler_tag eh_tag = NULL; | static eventhandler_tag eh_tag = NULL; | ||||
int err = 0; | int err = 0; | ||||
switch (what) { | switch (what) { | ||||
case MOD_LOAD: /* kldload */ | case MOD_LOAD: /* kldload */ | ||||
fuse_pbuf_freecnt = nswbuf / 2 + 1; | |||||
mtx_init(&fuse_mtx, "fuse_mtx", NULL, MTX_DEF); | mtx_init(&fuse_mtx, "fuse_mtx", NULL, MTX_DEF); | ||||
err = fuse_device_init(); | err = fuse_device_init(); | ||||
if (err) { | if (err) { | ||||
mtx_destroy(&fuse_mtx); | mtx_destroy(&fuse_mtx); | ||||
return (err); | return (err); | ||||
} | } | ||||
fuse_ipc_init(); | fuse_ipc_init(); | ||||
fuse_pbuf_zone = uma_zsecond_create("fusepbuf", pbuf_ctor, | |||||
pbuf_dtor, pbuf_init, NULL, pbuf_zone); | |||||
uma_zone_set_max(fuse_pbuf_zone, nswbuf / 2 + 1); | |||||
/* vfs_modevent ignores its first arg */ | /* vfs_modevent ignores its first arg */ | ||||
if ((err = vfs_modevent(NULL, what, &fuse_vfsconf))) | if ((err = vfs_modevent(NULL, what, &fuse_vfsconf))) | ||||
fuse_bringdown(eh_tag); | fuse_bringdown(eh_tag); | ||||
else | else | ||||
printf("fuse-freebsd: version %s, FUSE ABI %d.%d\n", | printf("fuse-freebsd: version %s, FUSE ABI %d.%d\n", | ||||
FUSE_FREEBSD_VERSION, | FUSE_FREEBSD_VERSION, | ||||
FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION); | FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION); | ||||
break; | break; | ||||
case MOD_UNLOAD: | case MOD_UNLOAD: | ||||
if ((err = vfs_modevent(NULL, what, &fuse_vfsconf))) | if ((err = vfs_modevent(NULL, what, &fuse_vfsconf))) | ||||
return (err); | return (err); | ||||
fuse_bringdown(eh_tag); | fuse_bringdown(eh_tag); | ||||
uma_zdestroy(fuse_pbuf_zone); | |||||
break; | break; | ||||
default: | default: | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
return (err); | return (err); | ||||
} | } | ||||
Show All 10 Lines |