/*********** mount lookup *********/
DEFINE_MUTEX(lustre_mount_info_lock);
-static CFS_LIST_HEAD(server_mount_info_list);
+static struct list_head server_mount_info_list =
+ LIST_HEAD_INIT(server_mount_info_list);
static struct lustre_mount_info *server_find_mount(const char *name)
{
- cfs_list_t *tmp;
+ struct list_head *tmp;
struct lustre_mount_info *lmi;
ENTRY;
- cfs_list_for_each(tmp, &server_mount_info_list) {
- lmi = cfs_list_entry(tmp, struct lustre_mount_info,
- lmi_list_chain);
+ list_for_each(tmp, &server_mount_info_list) {
+ lmi = list_entry(tmp, struct lustre_mount_info,
+ lmi_list_chain);
if (strcmp(name, lmi->lmi_name) == 0)
RETURN(lmi);
}
}
lmi->lmi_name = name_cp;
lmi->lmi_sb = sb;
- cfs_list_add(&lmi->lmi_list_chain, &server_mount_info_list);
+ list_add(&lmi->lmi_list_chain, &server_mount_info_list);
mutex_unlock(&lustre_mount_info_lock);
CDEBUG(D_MOUNT, "deregister mount %p from %s\n", lmi->lmi_sb, name);
OBD_FREE(lmi->lmi_name, strlen(lmi->lmi_name) + 1);
- cfs_list_del(&lmi->lmi_list_chain);
+ list_del(&lmi->lmi_list_chain);
OBD_FREE(lmi, sizeof(*lmi));
mutex_unlock(&lustre_mount_info_lock);
}
EXPORT_SYMBOL(tgt_name2lwp_name);
-static CFS_LIST_HEAD(lwp_register_list);
+static struct list_head lwp_register_list =
+ LIST_HEAD_INIT(lwp_register_list);
DEFINE_MUTEX(lwp_register_list_lock);
int lustre_register_lwp_item(const char *lwpname, struct obd_export **exp,
lri->lri_exp = exp;
lri->lri_cb_func = cb_func;
lri->lri_cb_data = cb_data;
- CFS_INIT_LIST_HEAD(&lri->lri_list);
- cfs_list_add(&lri->lri_list, &lwp_register_list);
+ INIT_LIST_HEAD(&lri->lri_list);
+ list_add(&lri->lri_list, &lwp_register_list);
if (*exp != NULL && cb_func != NULL)
cb_func(cb_data);
struct lwp_register_item *lri, *tmp;
mutex_lock(&lwp_register_list_lock);
- cfs_list_for_each_entry_safe(lri, tmp, &lwp_register_list, lri_list) {
+ list_for_each_entry_safe(lri, tmp, &lwp_register_list, lri_list) {
if (exp == lri->lri_exp) {
if (*exp)
class_export_put(*exp);
- cfs_list_del(&lri->lri_list);
+ list_del(&lri->lri_list);
OBD_FREE_PTR(lri);
break;
}
LASSERT(exp != NULL);
mutex_lock(&lwp_register_list_lock);
- cfs_list_for_each_entry_safe(lri, tmp, &lwp_register_list, lri_list) {
+ list_for_each_entry_safe(lri, tmp, &lwp_register_list, lri_list) {
if (strcmp(exp->exp_obd->obd_name, lri->lri_name))
continue;
if (*lri->lri_exp != NULL)
lustre_cfg_string(cfg, 1));
lcfg = lustre_cfg_new(LCFG_ADD_CONN, bufs);
-
+ if (lcfg == NULL)
+ GOTO(out_cfg, rc = -ENOMEM);
rc = class_add_conn(lwp, lcfg);
if (rc)
CERROR("%s: can't add conn: rc = %d\n", lwpname, rc);
-out:
- if (bufs != NULL)
- OBD_FREE_PTR(bufs);
if (lcfg != NULL)
lustre_cfg_free(lcfg);
+out_cfg:
+ if (bufs != NULL)
+ OBD_FREE_PTR(bufs);
+out:
if (lwpname != NULL)
OBD_FREE(lwpname, MTI_NAME_MAXLEN);
RETURN(rc);
*ptr = '-';
break;
}
-
*ptr = '-';
+
+ if (IS_MDT(lsi) && idx != 0)
+ break;
+
rc = lustre_lwp_add_conn(lcfg, lsi, idx);
break;
}
struct dt_device_param p;
char flagstr[16];
int rc;
+ bool already_started = 0;
ENTRY;
CDEBUG(D_MOUNT,
GOTO(out, rc);
obd = class_name2obd(lsi->lsi_osd_obdname);
LASSERT(obd);
+ } else {
+ CDEBUG(D_MOUNT, "%s already started\n", lsi->lsi_osd_obdname);
+ already_started = 1;
+ /* but continue setup to allow special case of MDT and internal
+ * MGT being started separately, that will be identified in
+ * caller server_fill_super().
+ */
}
rc = obd_connect(NULL, &lsi->lsi_osd_exp,
obd, &obd->obd_uuid, NULL, NULL);
+
+ OBD_FAIL_TIMEOUT(OBD_FAIL_TGT_DELAY_CONNECT, 10);
+
if (rc) {
- obd->obd_force = 1;
- class_manual_cleanup(obd);
- lsi->lsi_dt_dev = NULL;
- RETURN(rc);
+ if (!already_started) {
+ obd->obd_force = 1;
+ class_manual_cleanup(obd);
+ lsi->lsi_dt_dev = NULL;
+ }
+ GOTO(out, rc);
}
LASSERT(obd->obd_lu_dev);
dt_conf_get(NULL, lsi->lsi_dt_dev, &p);
out:
- RETURN(rc);
+ RETURN(already_started ? -EALREADY : rc);
}
/** Fill in the superblock info for a Lustre server.
/* Start low level OSD */
rc = osd_start(lsi, sb->s_flags);
- if (rc) {
+ /* Handle separate nosvc and nomgs case */
+ if (rc && ((rc != -EALREADY) || !(lsi->lsi_lmd->lmd_flags &
+ (LMD_FLG_NOSVC|LMD_FLG_NOMGS)))) {
CERROR("Unable to start osd on %s: %d\n",
lsi->lsi_lmd->lmd_dev, rc);
lustre_put_lsi(sb);