static void __exit jool_exit(void) { nf_unregister_hooks(nfho, ARRAY_SIZE(nfho)); nlhandler_destroy(); logtime_destroy(); xlator_destroy(); #ifdef JKMEMLEAK wkmalloc_print_leaks(); wkmalloc_destroy(); #endif log_info("%s v" JOOL_VERSION_STR " module removed.", xlat_get_name()); }
static int __init jool_init(void) { int error; log_debug("Inserting %s...", xlat_get_name()); /* Init Jool's submodules. */ error = xlator_init(); if (error) goto xlator_fail; error = logtime_init(); if (error) goto log_time_fail; error = nlhandler_init(); if (error) goto nlhandler_fail; /* This needs to be last! (except for the hook registering.) */ error = add_instance(); if (error) goto instance_fail; /* Hook Jool to Netfilter. */ error = nf_register_hooks(nfho, ARRAY_SIZE(nfho)); if (error) goto nf_register_hooks_fail; /* Yay */ log_info("%s v" JOOL_VERSION_STR " module inserted.", xlat_get_name()); return 0; nf_register_hooks_fail: xlator_rm(); instance_fail: nlhandler_destroy(); nlhandler_fail: logtime_destroy(); log_time_fail: xlator_destroy(); xlator_fail: return error; }
int create_fuse_mount (glusterfs_ctx_t *ctx) { int ret = 0; cmd_args_t *cmd_args = NULL; xlator_t *master = NULL; cmd_args = &ctx->cmd_args; if (!cmd_args->mount_point) return 0; master = GF_CALLOC (1, sizeof (*master), gfd_mt_xlator_t); if (!master) goto err; master->name = gf_strdup ("fuse"); if (!master->name) goto err; if (xlator_set_type (master, "mount/fuse") == -1) { gf_log ("glusterfsd", GF_LOG_ERROR, "MOUNT-POINT %s initialization failed", cmd_args->mount_point); goto err; } master->ctx = ctx; master->options = get_new_dict (); ret = dict_set_static_ptr (master->options, ZR_MOUNTPOINT_OPT, cmd_args->mount_point); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set mount-point to options dictionary"); goto err; } if (cmd_args->fuse_attribute_timeout >= 0) { ret = dict_set_double (master->options, ZR_ATTR_TIMEOUT_OPT, cmd_args->fuse_attribute_timeout); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } } if (cmd_args->fuse_entry_timeout >= 0) { ret = dict_set_double (master->options, ZR_ENTRY_TIMEOUT_OPT, cmd_args->fuse_entry_timeout); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } } if (cmd_args->client_pid_set) { ret = dict_set_int32 (master->options, "client-pid", cmd_args->client_pid); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } } if (cmd_args->volfile_check) { ret = dict_set_int32 (master->options, ZR_STRICT_VOLFILE_CHECK, cmd_args->volfile_check); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } } if (cmd_args->dump_fuse) { ret = dict_set_static_ptr (master->options, ZR_DUMP_FUSE, cmd_args->dump_fuse); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } } switch (cmd_args->fuse_direct_io_mode) { case GF_OPTION_DISABLE: /* disable */ ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT, "disable"); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } break; case GF_OPTION_ENABLE: /* enable */ ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT, "enable"); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set dict value."); goto err; } break; case GF_OPTION_DEFERRED: /* default */ default: break; } ret = xlator_init (master); if (ret) goto err; ctx->master = master; return 0; err: if (master) { xlator_destroy (master); } return -1; }