#define PRINT_CMD CDEBUG
#define PRINT_MASK (D_SUPER | D_CONFIG)
+#include <linux/statfs.h>
#include <obd.h>
#include <obd_class.h>
#include <lustre/lustre_user.h>
/*********** 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;
}
static int lsi_prepare(struct lustre_sb_info *lsi)
{
+ const char *osd_type;
+ const char *fstype;
__u32 index;
int rc;
ENTRY;
RETURN(-EINVAL);
}
- if (strlen(lsi->lsi_lmd->lmd_profile) >= sizeof(lsi->lsi_svname))
- RETURN(-ENAMETOOLONG);
-
- strcpy(lsi->lsi_svname, lsi->lsi_lmd->lmd_profile);
-
/* Determine osd type */
- if (lsi->lsi_lmd->lmd_osd_type != NULL) {
- if (strlen(lsi->lsi_lmd->lmd_osd_type) >=
- sizeof(lsi->lsi_osd_type))
- RETURN(-ENAMETOOLONG);
-
- strcpy(lsi->lsi_osd_type, lsi->lsi_lmd->lmd_osd_type);
+ if (lsi->lsi_lmd->lmd_osd_type == NULL) {
+ osd_type = LUSTRE_OSD_LDISKFS_NAME;
+ fstype = "ldiskfs";
} else {
- strcpy(lsi->lsi_osd_type, LUSTRE_OSD_LDISKFS_NAME);
+ osd_type = lsi->lsi_lmd->lmd_osd_type;
+ fstype = lsi->lsi_lmd->lmd_osd_type;
}
+ if (strlen(lsi->lsi_lmd->lmd_profile) >= sizeof(lsi->lsi_svname) ||
+ strlen(osd_type) >= sizeof(lsi->lsi_osd_type) ||
+ strlen(fstype) >= sizeof(lsi->lsi_fstype))
+ RETURN(-ENAMETOOLONG);
+
+ strlcpy(lsi->lsi_svname, lsi->lsi_lmd->lmd_profile,
+ sizeof(lsi->lsi_svname));
+ strlcpy(lsi->lsi_osd_type, osd_type, sizeof(lsi->lsi_osd_type));
/* XXX: a temp. solution for components using ldiskfs
* to be removed in one of the subsequent patches */
- if (!strcmp(lsi->lsi_lmd->lmd_osd_type, "osd-ldiskfs"))
- strcpy(lsi->lsi_fstype, "ldiskfs");
- else
- strcpy(lsi->lsi_fstype, lsi->lsi_lmd->lmd_osd_type);
+ strlcpy(lsi->lsi_fstype, fstype, sizeof(lsi->lsi_fstype));
/* Determine server type */
rc = server_name2index(lsi->lsi_svname, &index, NULL);
GOTO(out, rc);
obd = class_name2obd(lsi->lsi_osd_obdname);
LASSERT(obd);
+ } else {
+ CDEBUG(D_MOUNT, "%s already started\n", lsi->lsi_osd_obdname);
+ /* but continue setup to allow special case of MDT and internal
+ * MGT being started separately. */
+ if (!((IS_MGS(lsi) && (lsi->lsi_lmd->lmd_flags &
+ LMD_FLG_NOMGS)) ||
+ (IS_MDT(lsi) && (lsi->lsi_lmd->lmd_flags &
+ LMD_FLG_NOSVC))))
+ RETURN(-EALREADY);
}
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);