fsal_status_t load_FS_common_parameters_from_conf(config_file_t in_config, struct fsal_fs_params *common_info) { int err; int var_max, var_index; char *key_name; char *key_value; config_item_t block; block = config_FindItemByName(in_config, CONF_LABEL_FS_COMMON); /* cannot read item */ if (block == NULL) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: Cannot read item \"%s\" from configuration file", CONF_LABEL_FS_COMMON); return fsalstat(ERR_FSAL_NOENT, 0); } else if (config_ItemType(block) != CONFIG_ITEM_BLOCK) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: Item \"%s\" is expected to be a block", CONF_LABEL_FS_COMMON); return fsalstat(ERR_FSAL_INVAL, 0); } var_max = config_GetNbItems(block); for (var_index = 0; var_index < var_max; var_index++) { config_item_t item; item = config_GetItemByIndex(block, var_index); err = config_GetKeyValue(item, &key_name, &key_value); if (err) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR reading key[%d] from section \"%s\" of configuration file.", var_index, CONF_LABEL_FS_COMMON); return fsalstat(ERR_FSAL_SERVERFAULT, err); } /* does the variable exists ? */ if (!STRCMP(key_name, "link_support")) { int val = str_to_bool(key_value); if (val == -1) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: 0 or 1 expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } /* if set to false, force value to false. * else keep fs default. */ SET_INIT_INFO(common_info, link_support, FSAL_INIT_MAX_LIMIT, val); } else if (!STRCMP(key_name, "symlink_support")) { int val = str_to_bool(key_value); if (val == -1) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: 0 or 1 expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } /* if set to false, force value to false. * else keep fs default. */ SET_INIT_INFO(common_info, symlink_support, FSAL_INIT_MAX_LIMIT, val); } else if (!STRCMP(key_name, "cansettime")) { int val = str_to_bool(key_value); if (val == -1) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: 0 or 1 expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } /* if set to false, force value to false. * else keep fs default. */ SET_INIT_INFO(common_info, cansettime, FSAL_INIT_MAX_LIMIT, val); } else if (!STRCMP(key_name, "maxread")) { int size; size = s_read_int(key_value); SET_INIT_INFO(common_info, maxread, FSAL_INIT_FORCE_VALUE, size); } else if (!STRCMP(key_name, "maxwrite")) { uint32_t size; size = s_read_int(key_value); SET_INIT_INFO(common_info, maxwrite, FSAL_INIT_FORCE_VALUE, size); } else if (!STRCMP(key_name, "umask")) { int mode = s_read_octal(key_value); if (mode < 0) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: octal expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } SET_INIT_INFO(common_info, umask, FSAL_INIT_FORCE_VALUE, unix2fsal_mode(mode)); } else if (!STRCMP(key_name, "auth_xdev_export")) { int val = str_to_bool(key_value); if (val == -1) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: boolean expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } SET_INIT_INFO(common_info, auth_exportpath_xdev, FSAL_INIT_FORCE_VALUE, val); } else if (!STRCMP(key_name, "xattr_access_rights")) { int mode = s_read_octal(key_value); if (mode < 0) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: octal expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } SET_INIT_INFO(common_info, xattr_access_rights, FSAL_INIT_FORCE_VALUE, unix2fsal_mode(mode)); } else { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unknown or unsettable key: %s (item %s)", key_name, CONF_LABEL_FS_COMMON); return fsalstat(ERR_FSAL_INVAL, 0); } } return fsalstat(ERR_FSAL_NO_ERROR, 0); }
fsal_status_t LUSTREFSAL_load_FSAL_parameter_from_conf(config_file_t in_config, fsal_parameter_t * out_parameter) { int err; int var_max, var_index; char *key_name; char *key_value; config_item_t block; int DebugLevel = -1; char *LogFile = NULL; block = config_FindItemByName(in_config, CONF_LABEL_FSAL); /* cannot read item */ if(block == NULL) { LogCrit(COMPONENT_FSAL,"FSAL LOAD PARAMETER: Cannot read item \"%s\" from configuration file", CONF_LABEL_FSAL); ReturnCode(ERR_FSAL_NOENT, 0); } else if(config_ItemType(block) != CONFIG_ITEM_BLOCK) { LogCrit(COMPONENT_FSAL,"FSAL LOAD PARAMETER: Item \"%s\" is expected to be a block", CONF_LABEL_FSAL); ReturnCode(ERR_FSAL_INVAL, 0); } /* read variable for fsal init */ var_max = config_GetNbItems(block); for(var_index = 0; var_index < var_max; var_index++) { config_item_t item; item = config_GetItemByIndex(block, var_index); err = config_GetKeyValue(item, &key_name, &key_value); if(err) { LogCrit(COMPONENT_FSAL, "FSAL LOAD PARAMETER: ERROR reading key[%d] from section \"%s\" of configuration file.", var_index, CONF_LABEL_FSAL); ReturnCode(ERR_FSAL_SERVERFAULT, err); } if(!STRCMP(key_name, "DebugLevel")) { DebugLevel = ReturnLevelAscii(key_value); if(DebugLevel == -1) { LogCrit(COMPONENT_FSAL,"FSAL LOAD PARAMETER: ERROR: Invalid debug level name: \"%s\".", key_value); ReturnCode(ERR_FSAL_INVAL, -1); } } else if(!STRCMP(key_name, "LogFile")) { LogFile = key_value; } else if(!STRCMP(key_name, "Max_FS_calls")) { int maxcalls = s_read_int(key_value); if(maxcalls < 0) { LogCrit(COMPONENT_FSAL, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: null or positive integer expected.", key_name); ReturnCode(ERR_FSAL_INVAL, 0); } out_parameter->fsal_info.max_fs_calls = (unsigned int)maxcalls; } else { LogCrit(COMPONENT_FSAL, "FSAL LOAD PARAMETER: ERROR: Unknown or unsettable key: %s (item %s)", key_name, CONF_LABEL_FSAL); ReturnCode(ERR_FSAL_INVAL, 0); } } /* init logging */ if(LogFile) SetComponentLogFile(COMPONENT_FSAL, LogFile); if(DebugLevel != -1) SetComponentLogLevel(COMPONENT_FSAL, DebugLevel); ReturnCode(ERR_FSAL_NO_ERROR, 0); } /* FSAL_load_FSAL_parameter_from_conf */
static fsal_status_t load_FSAL_parameters_from_conf(config_file_t in_config, const char *fsal_name, fsal_init_info_t * init_info, fsal_extra_arg_parser_f extra) { int err; int var_max, var_index; char *key_name; char *key_value; config_item_t fsal_block, block = NULL; int i, fsal_cnt; fsal_block = config_FindItemByName(in_config, CONF_LABEL_FSAL); if (fsal_block == NULL) { LogFatal(COMPONENT_INIT, "Cannot find item \"%s\" in configuration", CONF_LABEL_FSAL); return fsalstat(ERR_FSAL_NOENT, 0); } if (config_ItemType(fsal_block) != CONFIG_ITEM_BLOCK) { LogFatal(COMPONENT_INIT, "\"%s\" is not a block", CONF_LABEL_FSAL); return fsalstat(ERR_FSAL_NOENT, 0); } fsal_cnt = config_GetNbItems(fsal_block); for (i = 0; i < fsal_cnt; i++) { block = config_GetItemByIndex(fsal_block, i); if (config_ItemType(block) == CONFIG_ITEM_BLOCK && strcasecmp(config_GetBlockName(block), fsal_name) == 0) { break; } } if (i == fsal_cnt) { LogFatal(COMPONENT_INIT, "Cannot find the %s section of %s in the configuration file", fsal_name, CONF_LABEL_FSAL); return fsalstat(ERR_FSAL_NOENT, 0); } if (config_ItemType(block) != CONFIG_ITEM_BLOCK) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: Item \"%s\" is expected to be a block", fsal_name); return fsalstat(ERR_FSAL_INVAL, 0); } /* read variable for fsal init */ var_max = config_GetNbItems(block); for (var_index = 0; var_index < var_max; var_index++) { config_item_t item; item = config_GetItemByIndex(block, var_index); err = config_GetKeyValue(item, &key_name, &key_value); if (err) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR reading key[%d] from section \"%s\" of configuration file.", var_index, CONF_LABEL_FSAL); return fsalstat(ERR_FSAL_SERVERFAULT, err); } if (!STRCMP(key_name, "DebugLevel") || !STRCMP(key_name, "LogFile")) { LogWarn(COMPONENT_CONFIG, "Deprecated FSAL option %s=\'%s\'", key_name, key_value); } else if (!STRCMP(key_name, "Max_FS_calls")) { int maxcalls = s_read_int(key_value); if (maxcalls < 0) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: null or positive integer expected.", key_name); return fsalstat(ERR_FSAL_INVAL, 0); } } else if (strcasecmp(key_name, "FSAL_Shared_Library") == 0) { continue; /* scanned at load time */ } else if ((extra == NULL) || ((*extra) (key_name, key_value, init_info, fsal_name))) { LogCrit(COMPONENT_CONFIG, "FSAL LOAD PARAMETER: ERROR: Unknown or unsettable key: %s (item %s)", key_name, CONF_LABEL_FSAL); return fsalstat(ERR_FSAL_INVAL, 0); } } return fsalstat(ERR_FSAL_NO_ERROR, 0); }