fsal_status_t fsal_load_config(const char *name, config_file_t config_struct, fsal_init_info_t *fsal_init, struct fsal_staticfsinfo_t *fs_info, fsal_extra_arg_parser_f extra) { fsal_status_t st; struct fsal_fs_params common_info; st = load_FSAL_parameters_from_conf(config_struct, name, fsal_init, extra); if (FSAL_IS_ERROR(st)) return st; /* Note - memset uses the fact that FSAL_FS_INIT_DEFAULT is 0 */ memset(&common_info, 0, sizeof(common_info)); st = load_FS_common_parameters_from_conf(config_struct, &common_info); if (FSAL_IS_ERROR(st)) return st; SET_BOOLEAN_PARAM(fs_info, common_info, symlink_support); SET_BOOLEAN_PARAM(fs_info, common_info, link_support); SET_BOOLEAN_PARAM(fs_info, common_info, lock_support); SET_BOOLEAN_PARAM(fs_info, common_info, lock_support_owner); SET_BOOLEAN_PARAM(fs_info, common_info, lock_support_async_block); SET_BOOLEAN_PARAM(fs_info, common_info, cansettime); SET_INTEGER_PARAM(fs_info, common_info, maxread); SET_INTEGER_PARAM(fs_info, common_info, maxwrite); SET_BITMAP_PARAM(fs_info, common_info, umask); SET_BOOLEAN_PARAM(fs_info, common_info, auth_exportpath_xdev); SET_BITMAP_PARAM(fs_info, common_info, xattr_access_rights); return fsalstat(ERR_FSAL_NO_ERROR, 0); }
/* * This function initializes shared variables of the fsal. */ fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info, fs_common_initinfo_t * fs_common_info) { /* sanity check */ if(!fsal_info || !fs_common_info) ReturnCode(ERR_FSAL_FAULT, 0); /* inits FS call semaphore */ if(fsal_info->max_fs_calls > 0) { int rc; limit_calls = TRUE; rc = semaphore_init(&sem_fs_calls, fsal_info->max_fs_calls); if(rc != 0) ReturnCode(ERR_FSAL_SERVERFAULT, rc); LogDebug(COMPONENT_FSAL, "FSAL INIT: Max simultaneous calls to filesystem is limited to %u.", fsal_info->max_fs_calls); } else { LogDebug(COMPONENT_FSAL, "FSAL INIT: Max simultaneous calls to filesystem is unlimited."); } /* setting default values. */ global_fs_info = default_hpss_info; /* Analyzing fs_common_info struct */ if((fs_common_info->behaviors.maxfilesize != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxlink != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxnamelen != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxpathlen != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.no_trunc != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.case_insensitive != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.case_preserving != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.named_attr != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.lease_time != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.supported_attrs != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.homogenous != FSAL_INIT_FS_DEFAULT)) ReturnCode(ERR_FSAL_NOTSUPP, 0); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, symlink_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, link_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support_owner); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support_async_block); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, cansettime); SET_INTEGER_PARAM(global_fs_info, fs_common_info, maxread); SET_INTEGER_PARAM(global_fs_info, fs_common_info, maxwrite); SET_BITMAP_PARAM(global_fs_info, fs_common_info, umask); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, auth_exportpath_xdev); SET_BITMAP_PARAM(global_fs_info, fs_common_info, xattr_access_rights); LogDebug(COMPONENT_FSAL, "FileSystem info :"); LogDebug(COMPONENT_FSAL, " maxfilesize = %llX ", global_fs_info.maxfilesize); LogDebug(COMPONENT_FSAL, " maxlink = %lu ", global_fs_info.maxlink); LogDebug(COMPONENT_FSAL, " maxnamelen = %lu ", global_fs_info.maxnamelen); LogDebug(COMPONENT_FSAL, " maxpathlen = %lu ", global_fs_info.maxpathlen); LogDebug(COMPONENT_FSAL, " no_trunc = %d ", global_fs_info.no_trunc); LogDebug(COMPONENT_FSAL, " chown_restricted = %d ", global_fs_info.chown_restricted); LogDebug(COMPONENT_FSAL, " case_insensitive = %d ", global_fs_info.case_insensitive); LogDebug(COMPONENT_FSAL, " case_preserving = %d ", global_fs_info.case_preserving); LogDebug(COMPONENT_FSAL, " fh_expire_type = %hu ", global_fs_info.fh_expire_type); LogDebug(COMPONENT_FSAL, " link_support = %d ", global_fs_info.link_support); LogDebug(COMPONENT_FSAL, " symlink_support = %d ", global_fs_info.symlink_support); LogDebug(COMPONENT_FSAL, " lock_support = %d ", global_fs_info.lock_support); LogDebug(COMPONENT_FSAL, " lock_support_owner = %d ", global_fs_info.lock_support_owner); LogDebug(COMPONENT_FSAL, " lock_support_async_block = %d ", global_fs_info.lock_support_async_block); LogDebug(COMPONENT_FSAL, " named_attr = %d ", global_fs_info.named_attr); LogDebug(COMPONENT_FSAL, " unique_handles = %d ", global_fs_info.unique_handles); LogDebug(COMPONENT_FSAL, " lease_time = %u.%u ", global_fs_info.lease_time.seconds, global_fs_info.lease_time.nseconds); LogDebug(COMPONENT_FSAL, " acl_support = %hu ", global_fs_info.acl_support); LogDebug(COMPONENT_FSAL, " cansettime = %d ", global_fs_info.cansettime); LogDebug(COMPONENT_FSAL, " homogenous = %d ", global_fs_info.homogenous); LogDebug(COMPONENT_FSAL, " supported_attrs = %llX ", global_fs_info.supported_attrs); LogDebug(COMPONENT_FSAL, " maxread = %llX ", global_fs_info.maxread); LogDebug(COMPONENT_FSAL, " maxwrite = %llX ", global_fs_info.maxwrite); LogDebug(COMPONENT_FSAL, " umask = %#o ", global_fs_info.umask); LogDebug(COMPONENT_FSAL, " auth_exportpath_xdev = %d ", global_fs_info.auth_exportpath_xdev); LogDebug(COMPONENT_FSAL, " xattr_access_rights = %#o ", global_fs_info.xattr_access_rights); ReturnCode(ERR_FSAL_NO_ERROR, 0); }
/* * This function initializes shared variables of the fsal. */ fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info, fs_common_initinfo_t * fs_common_info) { /* sanity check */ if(!fsal_info || !fs_common_info) ReturnCode(ERR_FSAL_FAULT, 0); /* inits FS call semaphore */ if(fsal_info->max_fs_calls > 0) { int rc; limit_calls = TRUE; rc = semaphore_init(&sem_fs_calls, fsal_info->max_fs_calls); if(rc != 0) ReturnCode(ERR_FSAL_SERVERFAULT, rc); LogDebug(COMPONENT_FSAL, "FSAL INIT: Max simultaneous calls to filesystem is limited to %u.", fsal_info->max_fs_calls); } else { LogDebug(COMPONENT_FSAL "FSAL INIT: Max simultaneous calls to filesystem is unlimited."); } /* setting default values. */ global_fs_info = default_hpss_info; /* Analyzing fs_common_info struct */ if((fs_common_info->behaviors.maxfilesize != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxlink != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxnamelen != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxpathlen != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.no_trunc != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.case_insensitive != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.case_preserving != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.named_attr != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.lease_time != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.supported_attrs != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.homogenous != FSAL_INIT_FS_DEFAULT)) ReturnCode(ERR_FSAL_NOTSUPP, 0); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, symlink_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, link_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support_owner); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support_async_block); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, cansettime); SET_INTEGER_PARAM(global_fs_info, fs_common_info, maxread); SET_INTEGER_PARAM(global_fs_info, fs_common_info, maxwrite); SET_BITMAP_PARAM(global_fs_info, fs_common_info, umask); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, auth_exportpath_xdev); SET_BITMAP_PARAM(global_fs_info, fs_common_info, xattr_access_rights); display_fsinfo(&global_fs_info); ReturnCode(ERR_FSAL_NO_ERROR, 0); }
/* * This function initializes shared variables of the fsal. */ fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info, fs_common_initinfo_t * fs_common_info, posixfs_specific_initinfo_t * fs_specific_info) { /* sanity check */ if(!fsal_info || !fs_common_info || !fs_specific_info) ReturnCode(ERR_FSAL_FAULT, 0); /* inits FS call semaphore */ if(fsal_info->max_fs_calls > 0) { int rc; limit_calls = TRUE; rc = semaphore_init(&sem_fs_calls, fsal_info->max_fs_calls); if(rc != 0) ReturnCode(ERR_FSAL_SERVERFAULT, rc); LogDebug(COMPONENT_FSAL, "FSAL INIT: Max simultaneous calls to filesystem is limited to %u.", fsal_info->max_fs_calls); } else { LogDebug(COMPONENT_FSAL, "FSAL INIT: Max simultaneous calls to filesystem is unlimited."); } /* setting default values. */ global_fs_info = default_posix_info; LogDebug(COMPONENT_FSAL, "{"); LogDebug(COMPONENT_FSAL, " maxfilesize = %llX ", default_posix_info.maxfilesize); LogDebug(COMPONENT_FSAL, " maxlink = %lu ", default_posix_info.maxlink); LogDebug(COMPONENT_FSAL, " maxnamelen = %lu ", default_posix_info.maxnamelen); LogDebug(COMPONENT_FSAL, " maxpathlen = %lu ", default_posix_info.maxpathlen); LogDebug(COMPONENT_FSAL, " no_trunc = %d ", default_posix_info.no_trunc); LogDebug(COMPONENT_FSAL, " chown_restricted = %d ", default_posix_info.chown_restricted); LogDebug(COMPONENT_FSAL, " case_insensitive = %d ", default_posix_info.case_insensitive); LogDebug(COMPONENT_FSAL, " case_preserving = %d ", default_posix_info.case_preserving); LogDebug(COMPONENT_FSAL, " fh_expire_type = %hu ", default_posix_info.fh_expire_type); LogDebug(COMPONENT_FSAL, " link_support = %d ", default_posix_info.link_support); LogDebug(COMPONENT_FSAL, " symlink_support = %d ", default_posix_info.symlink_support); LogDebug(COMPONENT_FSAL, " lock_support = %d ", default_posix_info.lock_support); LogDebug(COMPONENT_FSAL, " named_attr = %d ", default_posix_info.named_attr); LogDebug(COMPONENT_FSAL, " unique_handles = %d ", default_posix_info.unique_handles); LogDebug(COMPONENT_FSAL, " acl_support = %hu ", default_posix_info.acl_support); LogDebug(COMPONENT_FSAL, " cansettime = %d ", default_posix_info.cansettime); LogDebug(COMPONENT_FSAL, " homogenous = %d ", default_posix_info.homogenous); LogDebug(COMPONENT_FSAL, " supported_attrs = %llX ", default_posix_info.supported_attrs); LogDebug(COMPONENT_FSAL, " maxread = %llX ", default_posix_info.maxread); LogDebug(COMPONENT_FSAL, " maxwrite = %llX ", default_posix_info.maxwrite); LogDebug(COMPONENT_FSAL, " umask = %X ", default_posix_info.umask); LogDebug(COMPONENT_FSAL, "}"); /* Analyzing fs_common_info struct */ if((fs_common_info->behaviors.maxfilesize != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxlink != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxnamelen != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.maxpathlen != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.no_trunc != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.case_insensitive != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.case_preserving != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.named_attr != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.lease_time != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.supported_attrs != FSAL_INIT_FS_DEFAULT) || (fs_common_info->behaviors.homogenous != FSAL_INIT_FS_DEFAULT)) ReturnCode(ERR_FSAL_NOTSUPP, 0); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, symlink_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, link_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, lock_support); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, cansettime); SET_INTEGER_PARAM(global_fs_info, fs_common_info, maxread); SET_INTEGER_PARAM(global_fs_info, fs_common_info, maxwrite); SET_BITMAP_PARAM(global_fs_info, fs_common_info, umask); SET_BOOLEAN_PARAM(global_fs_info, fs_common_info, auth_exportpath_xdev); SET_BITMAP_PARAM(global_fs_info, fs_common_info, xattr_access_rights); /* setting global database parameters */ global_posixdb_params = fs_specific_info->dbparams; LogFullDebug(COMPONENT_FSAL, "Supported attributes constant = 0x%llX.", POSIX_SUPPORTED_ATTRIBUTES); LogFullDebug(COMPONENT_FSAL, "Supported attributes default = 0x%llX.", default_posix_info.supported_attrs); LogDebug(COMPONENT_FSAL, "FSAL INIT: Supported attributes mask = 0x%llX.", global_fs_info.supported_attrs); /* initialize database cache */ if(fsal_posixdb_cache_init()) ReturnCode(ERR_FSAL_FAULT, 0); LogDebug(COMPONENT_FSAL, "global_fs_info {"); LogDebug(COMPONENT_FSAL, " maxfilesize = %llX ", global_fs_info.maxfilesize); LogDebug(COMPONENT_FSAL, " maxlink = %lu ", global_fs_info.maxlink); LogDebug(COMPONENT_FSAL, " maxnamelen = %lu ", global_fs_info.maxnamelen); LogDebug(COMPONENT_FSAL, " maxpathlen = %lu ", global_fs_info.maxpathlen); LogDebug(COMPONENT_FSAL, " no_trunc = %d ", global_fs_info.no_trunc); LogDebug(COMPONENT_FSAL, " chown_restricted = %d ", global_fs_info.chown_restricted); LogDebug(COMPONENT_FSAL, " case_insensitive = %d ", global_fs_info.case_insensitive); LogDebug(COMPONENT_FSAL, " case_preserving = %d ", global_fs_info.case_preserving); LogDebug(COMPONENT_FSAL, " fh_expire_type = %hu ", global_fs_info.fh_expire_type); LogDebug(COMPONENT_FSAL, " link_support = %d ", global_fs_info.link_support); LogDebug(COMPONENT_FSAL, " symlink_support = %d ", global_fs_info.symlink_support); LogDebug(COMPONENT_FSAL, " lock_support = %d ", global_fs_info.lock_support); LogDebug(COMPONENT_FSAL, " named_attr = %d ", global_fs_info.named_attr); LogDebug(COMPONENT_FSAL, " unique_handles = %d ", global_fs_info.unique_handles); LogDebug(COMPONENT_FSAL, " acl_support = %hu ", global_fs_info.acl_support); LogDebug(COMPONENT_FSAL, " cansettime = %d ", global_fs_info.cansettime); LogDebug(COMPONENT_FSAL, " homogenous = %d ", global_fs_info.homogenous); LogDebug(COMPONENT_FSAL, " supported_attrs = %llX ", global_fs_info.supported_attrs); LogDebug(COMPONENT_FSAL, " maxread = %llX ", global_fs_info.maxread); LogDebug(COMPONENT_FSAL, " maxwrite = %llX ", global_fs_info.maxwrite); LogDebug(COMPONENT_FSAL, " umask = %X ", global_fs_info.umask); LogDebug(COMPONENT_FSAL, "}"); ReturnCode(ERR_FSAL_NO_ERROR, 0); }