lustre_cfg_bufs_set(bufs, 2, cfg, sizeof(*cfg));
lustre_cfg_bufs_set(bufs, 3, &sb, sizeof(sb));
lcfg = lustre_cfg_new(LCFG_LOG_START, bufs);
- rc = obd_process_config(mgc, sizeof(*lcfg), lcfg);
- lustre_cfg_free(lcfg);
-
+ if (lcfg == NULL)
+ GOTO(out, rc = -ENOMEM);
+ rc = obd_process_config(mgc, sizeof(*lcfg), lcfg);
+ lustre_cfg_free(lcfg);
+out:
OBD_FREE_PTR(bufs);
if (rc == -EINVAL)
if (cfg)
lustre_cfg_bufs_set(&bufs, 2, cfg, sizeof(*cfg));
lcfg = lustre_cfg_new(LCFG_LOG_END, &bufs);
+ if (lcfg == NULL)
+ RETURN(-ENOMEM);
rc = obd_process_config(mgc, sizeof(*lcfg), lcfg);
lustre_cfg_free(lcfg);
RETURN(rc);
lustre_cfg_bufs_set_string(&bufs, 4, s4);
lcfg = lustre_cfg_new(cmd, &bufs);
+ if (lcfg == NULL)
+ return -ENOMEM;
lcfg->lcfg_nid = nid;
rc = class_process_config(lcfg);
lustre_cfg_free(lcfg);
lnet_nid_t nid;
char *mgcname = NULL, *niduuid = NULL, *mgssec = NULL;
char *ptr;
- int recov_bk;
int rc = 0, i = 0, j, len;
ENTRY;
obd = class_name2obd(mgcname);
if (obd && !obd->obd_stopping) {
+ int recov_bk;
+
rc = obd_set_info_async(NULL, obd->obd_self_export,
strlen(KEY_MGSSEC), KEY_MGSSEC,
strlen(mgssec), mgssec, NULL);
so we know when we can get rid of the mgc. */
atomic_set(&obd->u.cli.cl_mgc_refcount, 1);
- /* Try all connections, but only once. */
- recov_bk = 1;
- rc = obd_set_info_async(NULL, obd->obd_self_export,
- sizeof(KEY_INIT_RECOV_BACKUP),
- KEY_INIT_RECOV_BACKUP,
- sizeof(recov_bk), &recov_bk, NULL);
- if (rc)
- /* nonfatal */
- CWARN("can't set %s %d\n", KEY_INIT_RECOV_BACKUP, rc);
-
/* We connect to the MGS at setup, and don't disconnect until cleanup */
data->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_AT |
OBD_CONNECT_FULL20 | OBD_CONNECT_IMP_RECOV |
/* Default umount style */
lsi->lsi_flags = LSI_UMOUNT_FAILOVER;
+ INIT_LIST_HEAD(&lsi->lsi_lwp_list);
+ spin_lock_init(&lsi->lsi_lwp_lock);
- RETURN(lsi);
+ RETURN(lsi);
}
static int lustre_free_lsi(struct super_block *sb)
e.g. MDT, MGS, and potentially MGC */
int lustre_put_lsi(struct super_block *sb)
{
- struct lustre_sb_info *lsi = s2lsi(sb);
- ENTRY;
+ struct lustre_sb_info *lsi = s2lsi(sb);
+ ENTRY;
- LASSERT(lsi != NULL);
+ LASSERT(lsi != NULL);
CDEBUG(D_MOUNT, "put %p %d\n", sb, atomic_read(&lsi->lsi_mounts));
if (atomic_dec_and_test(&lsi->lsi_mounts)) {
/* wait till OSD is gone */
obd_zombie_barrier();
}
- lustre_free_lsi(sb);
- RETURN(1);
- }
- RETURN(0);
+ lustre_free_lsi(sb);
+ RETURN(1);
+ }
+ RETURN(0);
}
/*** SERVER NAME ***
}
/* Drop a ref to the mounted disk */
lustre_put_lsi(sb);
- lu_types_stop();
- RETURN(rc);
+
+ RETURN(rc);
}
EXPORT_SYMBOL(lustre_common_put_super);
static int lmd_make_exclusion(struct lustre_mount_data *lmd, const char *ptr)
{
const char *s1 = ptr, *s2;
- __u32 index, *exclude_list;
+ __u32 *exclude_list;
+ __u32 index = 0;
int rc = 0, devmax;
ENTRY;
*/
static int lmd_parse(char *options, struct lustre_mount_data *lmd)
{
- char *s1, *s2, *devname = NULL;
+ char *s1, *s2, *s3, *devname = NULL;
struct lustre_mount_data *raw = (struct lustre_mount_data *)options;
int rc = 0;
ENTRY;
/* Skip whitespace and extra commas */
while (*s1 == ' ' || *s1 == ',')
s1++;
+ s3 = s1;
/* Client options are parsed in ll_options: eg. flock,
user_xattr, acl */
rc = lmd_parse_mgs(lmd, &s2);
if (rc)
goto invalid;
+ s3 = s2;
clear++;
} else if (strncmp(s1, "writeconf", 9) == 0) {
lmd->lmd_flags |= LMD_FLG_WRITECONF;
} else if (strncmp(s1, "param=", 6) == 0) {
int length;
char *tail = strchr(s1 + 6, ',');
- if (tail == NULL)
+ if (tail == NULL) {
length = strlen(s1);
- else
- length = tail - s1;
+ } else {
+ lnet_nid_t nid;
+ char *param_str = tail + 1;
+ int supplementary = 1;
+
+ while (class_parse_nid_quiet(param_str, &nid,
+ ¶m_str) == 0) {
+ supplementary = 0;
+ }
+ length = param_str - s1 - supplementary;
+ }
length -= 6;
strncat(lmd->lmd_params, s1 + 6, length);
strcat(lmd->lmd_params, " ");
+ s3 = s1 + 6 + length;
clear++;
} else if (strncmp(s1, "osd=", 4) == 0) {
rc = lmd_parse_string(&lmd->lmd_osd_type, s1 + 4);
break;
}
- /* Find next opt */
- s2 = strchr(s1, ',');
+ /* Find next opt */
+ s2 = strchr(s3, ',');
if (s2 == NULL) {
if (clear)
*s1 = '\0';
if (lmd_is_client(lmd)) {
CDEBUG(D_MOUNT, "Mounting client %s\n", lmd->lmd_profile);
- if (!client_fill_super) {
+ if (client_fill_super == NULL)
+ request_module("lustre");
+ if (client_fill_super == NULL) {
LCONSOLE_ERROR_MSG(0x165, "Nothing registered for "
"client mount! Is the 'lustre' "
"module loaded?\n");
.fs_flags = FS_BINARY_MOUNTDATA | FS_REQUIRES_DEV |
FS_HAS_FIEMAP | FS_RENAME_DOES_D_MOVE,
};
+MODULE_ALIAS_FS("lustre");
int lustre_register_fs(void)
{