Example #1
0
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());
}
Example #2
0
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;
}
Example #3
0
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;
}