/* attach 0:MDC_uml1_mdsA_MNT_client 1:mdc 2:1d834_MNT_client_03f */
if ((lcfg->lcfg_command == LCFG_ATTACH) &&
(strcmp(lustre_cfg_string(lcfg, 1), LUSTRE_MDC_NAME) == 0)) {
- rc = server_name2index(lustre_cfg_string(lcfg, 0),
+ int type;
+ rc = libcfs_str2server(lustre_cfg_string(lcfg, 0), &type,
&index, NULL);
- if (rc != LDD_F_SV_TYPE_MDT) {
+ if (rc || type != SVTYPE_MDT) {
CWARN("Unparsable MDC name %s, assuming index 0\n",
lustre_cfg_string(lcfg, 0));
index = 0;
if (cfs_test_bit(FSDB_LOG_EMPTY, &fsdb->fsdb_flags))
RETURN(-1);
- if (mti->mti_flags & LDD_F_SV_TYPE_OST)
+ if (mti->mti_flags & SVTYPE_OST)
imap = fsdb->fsdb_ost_index_map;
- else if (mti->mti_flags & LDD_F_SV_TYPE_MDT)
+ else if (mti->mti_flags & SVTYPE_MDT)
imap = fsdb->fsdb_mdt_index_map;
else
RETURN(-EINVAL);
RETURN(rc);
}
- if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ if (mti->mti_flags & SVTYPE_OST) {
imap = fsdb->fsdb_ost_index_map;
- } else if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
+ } else if (mti->mti_flags & SVTYPE_MDT) {
imap = fsdb->fsdb_mdt_index_map;
if (fsdb->fsdb_mdt_count >= MAX_MDT_COUNT) {
LCONSOLE_ERROR_MSG(0x13f, "The max mdt count"
if (rc == -1)
RETURN(-ERANGE);
mti->mti_stripe_index = rc;
- if (mti->mti_flags & LDD_F_SV_TYPE_MDT)
+ if (mti->mti_flags & SVTYPE_MDT)
fsdb->fsdb_mdt_count ++;
}
RETURN(rc);
}
-static inline void name_create_mdt(char **logname, char *fsname, int i)
+static inline void name_create_sv(char **buf, char *fsname, char *type, int i)
{
- char mdt_index[9];
+ char sv_index[9];
- sprintf(mdt_index, "-MDT%04x", i);
- name_create(logname, fsname, mdt_index);
+ sprintf(sv_index, "-%s%04x", type, i);
+ name_create(buf, fsname, sv_index);
+}
+
+static inline void name_create_mdt(char **buf, char *fsname, int i)
+{
+ name_create_sv(buf, fsname, "MDT", i);
}
static void name_create_mdt_and_lov(char **logname, char **lovname,
}
/* Create mdc/osc client name (e.g. lustre-OST0001-osc) */
- if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
+ if (mti->mti_flags & SVTYPE_MDT) {
name_create(&cliname, mti->mti_svname, "-mdc");
- } else if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ } else if (mti->mti_flags & SVTYPE_OST) {
name_create(&cliname, mti->mti_svname, "-osc");
} else {
RETURN(-EINVAL);
name_destroy(&logname);
name_destroy(&cliname);
- if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ if (mti->mti_flags & SVTYPE_OST) {
/* Add OST failover nids to the MDT logs as well */
int i;
RETURN(rc);
}
+/** write_log_param helper to add or modify a parameter change lcfg record
+ * in a config log.
+ * @logname log to add lcfg to (e.g. client, mdt, ost)
+ * @bufs empty bufs for temp usage
+ * @tgtname target obd device this param is meant to affect
+ * @ptr ptr to param=val
+ */
static int mgs_wlp_lcfg(struct obd_device *obd, struct fs_db *fsdb,
struct mgs_target_info *mti,
char *logname, struct lustre_cfg_bufs *bufs,
RETURN(rc);
}
+/** write_log_params helper for server logs (MDT or OST)
+ * Figures out which server logs to modify, adds lcfg to each one.
+ * Understands "match all" wildcard (lustre-OST*)
+ * @param svtype MDT or OST
+ * @param bufs empty lcfg bufs to use
+ * @param ptr pointer to param=val string
+ */
+static int mgs_wlp_server(struct obd_device *obd, struct fs_db *fsdb,
+ struct mgs_target_info *mti, int svtype,
+ struct lustre_cfg_bufs *bufs,
+ char *ptr)
+{
+ int rc = 0, type, i;
+ __u32 idx;
+
+ if (strncmp(mti->mti_svname, mti->mti_fsname, MTI_NAME_MAXLEN) == 0)
+ /* device is unspecified completely? */
+ type = svtype | SVTYPE_ALL;
+ else
+ rc = libcfs_str2server(mti->mti_svname, &type, &idx, NULL);
+ if (rc < 0)
+ return rc;
+
+ if (type & SVTYPE_ALL) {
+ char *logname;
+
+ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
+ if (!cfs_test_bit(i, type & SVTYPE_MDT ?
+ fsdb->fsdb_mdt_index_map :
+ fsdb->fsdb_ost_index_map))
+ continue;
+ name_create_sv(&logname, mti->mti_fsname,
+ type & SVTYPE_MDT ? "MDT" : "OST", i);
+ rc = mgs_wlp_lcfg(obd, fsdb, mti,
+ logname, bufs,
+ logname, ptr);
+ name_destroy(&logname);
+ }
+ } else {
+ if (mgs_log_is_empty(obd, mti->mti_svname))
+ return -ENODEV;
+ rc = mgs_wlp_lcfg(obd, fsdb, mti,
+ mti->mti_svname, bufs,
+ mti->mti_svname, ptr);
+ }
+ return rc;
+}
+
/* Permanent settings of all parameters by writing into the appropriate
* configuration logs.
* A parameter with null value ("<param>='\0'") means to erase it out of
* the logs.
+ * @param ptr pointer to param=value string
*/
static int mgs_write_log_param(struct obd_device *obd, struct fs_db *fsdb,
struct mgs_target_info *mti, char *ptr)
GOTO(end, rc);
}
- if (class_match_param(ptr, PARAM_FAILNODE, NULL) == 0) {
+ if (class_find_param(ptr, PARAM_FAILNODE, NULL) == 0) {
/* Add a failover nidlist */
rc = 0;
/* We already processed failovers params for new
int flag = (*tmp == '0') ? CM_EXCLUDE : 0;
int i;
- if (!(mti->mti_flags & LDD_F_SV_TYPE_OST)) {
+ if (!(mti->mti_flags & SVTYPE_OST)) {
LCONSOLE_ERROR_MSG(0x144, "%s: Only OSCs can "
"be (de)activated.\n",
mti->mti_svname);
}
active_err:
if (rc) {
- LCONSOLE_ERROR_MSG(0x145, "Couldn't find %s in"
+ LCONSOLE_ERROR_MSG(0x145, "Couldn't find %s in "
"log (%d). No permanent "
"changes were made to the "
"config log.\n",
char *mdtlovname;
CDEBUG(D_MGS, "lov param %s\n", ptr);
- if (!(mti->mti_flags & LDD_F_SV_TYPE_MDT)) {
+ if (!(mti->mti_flags & SVTYPE_MDT)) {
LCONSOLE_ERROR_MSG(0x147, "LOV params must be "
"set on the MDT, not %s. "
"Ignoring.\n",
name_create(&cname, mti->mti_fsname, "-client");
/* Add the client type to match the obdname in
class_config_llog_handler */
- } else if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
+ } else if (mti->mti_flags & SVTYPE_MDT) {
/* COMPAT_146 */
if (fsdb->fsdb_mdc)
name_create(&cname, fsdb->fsdb_mdc, "");
else
name_create(&cname, mti->mti_svname,
"-mdc");
- } else if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ } else if (mti->mti_flags & SVTYPE_OST) {
/* COMPAT_146 */
if (cfs_test_bit(FSDB_OLDLOG14, &fsdb->fsdb_flags)) {
LCONSOLE_ERROR_MSG(0x148, "Upgraded "
cname, ptr);
/* osc params affect the MDT as well */
- if (!rc && (mti->mti_flags & LDD_F_SV_TYPE_OST)) {
+ if (!rc && (mti->mti_flags & SVTYPE_OST)) {
int i;
for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
GOTO(end, rc);
}
- /* All mdt. params in proc */
- if (class_match_param(ptr, PARAM_MDT, NULL) == 0) {
- int i;
- __u32 idx;
-
+ /* All mdt., mdd. params in proc */
+ if ((class_match_param(ptr, PARAM_MDT, NULL) == 0) ||
+ (class_match_param(ptr, PARAM_MDD, NULL) == 0)) {
CDEBUG(D_MGS, "%.3s param %s\n", ptr, ptr + 4);
- if (strncmp(mti->mti_svname, mti->mti_fsname,
- MTI_NAME_MAXLEN) == 0)
- /* device is unspecified completely? */
- rc = LDD_F_SV_TYPE_MDT | LDD_F_SV_ALL;
- else
- rc = server_name2index(mti->mti_svname, &idx, NULL);
- if (rc < 0)
- goto active_err;
- if ((rc & LDD_F_SV_TYPE_MDT) == 0)
- goto active_err;
- if (rc & LDD_F_SV_ALL) {
- for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
- if (!cfs_test_bit(i,
- fsdb->fsdb_mdt_index_map))
- continue;
- name_create_mdt(&logname, mti->mti_fsname, i);
- rc = mgs_wlp_lcfg(obd, fsdb, mti,
- logname, &bufs,
- logname, ptr);
- name_destroy(&logname);
- if (rc)
- goto active_err;
- }
- } else {
- rc = mgs_wlp_lcfg(obd, fsdb, mti,
- mti->mti_svname, &bufs,
- mti->mti_svname, ptr);
- if (rc)
- goto active_err;
- }
+ rc = mgs_wlp_server(obd, fsdb, mti, SVTYPE_MDT,
+ &bufs, ptr);
GOTO(end, rc);
}
- /* All mdd., ost. params in proc */
- if ((class_match_param(ptr, PARAM_MDD, NULL) == 0) ||
- (class_match_param(ptr, PARAM_OST, NULL) == 0)) {
+ /* All ost. params in proc */
+ if (class_match_param(ptr, PARAM_OST, NULL) == 0) {
CDEBUG(D_MGS, "%.3s param %s\n", ptr, ptr + 4);
- if (mgs_log_is_empty(obd, mti->mti_svname))
- GOTO(end, rc = -ENODEV);
-
- rc = mgs_wlp_lcfg(obd, fsdb, mti, mti->mti_svname,
- &bufs, mti->mti_svname, ptr);
+ rc = mgs_wlp_server(obd, fsdb, mti, SVTYPE_OST,
+ &bufs, ptr);
GOTO(end, rc);
}
if (mti->mti_flags &
(LDD_F_VIRGIN | LDD_F_UPGRADE14 | LDD_F_WRITECONF)) {
/* Generate a log from scratch */
- if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
+ if (mti->mti_flags & SVTYPE_MDT) {
rc = mgs_write_log_mdt(obd, fsdb, mti);
- } else if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ } else if (mti->mti_flags & SVTYPE_OST) {
rc = mgs_write_log_ost(obd, fsdb, mti);
} else {
CERROR("Unknown target type %#x, can't create log for "
CDEBUG(D_MGS, "found old, unupdated client log\n");
}
- if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
+ if (mti->mti_flags & SVTYPE_MDT) {
if (mgs_log_is_empty(obd, mti->mti_svname)) {
LCONSOLE_ERROR_MSG(0x14b, "The old MDT log %s is "
"missing. Was tunefs.lustre "
struct fs_db *fsdb;
struct mgs_target_info *mti;
char *devname, *param;
- char *ptr, *tmp;
- __u32 index;
- int rc = 0;
+ char *ptr;
+ __u32 index = 0;
+ int rc = 0, type = 0;
ENTRY;
print_lustre_cfg(lcfg);
- /* lustre, lustre-mdtlov, lustre-client, lustre-MDT0000 */
- devname = lustre_cfg_string(lcfg, 0);
param = lustre_cfg_string(lcfg, 1);
- if (!devname) {
- /* Assume device name embedded in param:
- lustre-OST0000.osc.max_dirty_mb=32 */
- ptr = strchr(param, '.');
- if (ptr) {
- devname = param;
- *ptr = 0;
- param = ptr + 1;
- }
- }
- if (!devname) {
+ /* format is lustre-OST0000.osc.max_dirty_mb=32 */
+ ptr = strchr(param, '.');
+ if (!ptr) {
LCONSOLE_ERROR_MSG(0x14d, "No target specified: %s\n", param);
- RETURN(-ENOSYS);
+ RETURN(-ENOENT);
}
+ devname = param;
+ *ptr = '\0';
+ param = ptr + 1;
+ CDEBUG(D_MGS, "device='%s' param='%s'\n", devname, param);
/* Extract fsname */
- ptr = strrchr(devname, '-');
memset(fsname, 0, MTI_NAME_MAXLEN);
- if (ptr && (server_name2index(ptr, &index, NULL) >= 0)) {
+ /* Check to see if we're a particular device */
+ if (libcfs_str2server(devname, &type, &index, &ptr) == 0) {
/* param related to llite isn't allowed to set by OST or MDT */
if (strncmp(param, PARAM_LLITE, sizeof(PARAM_LLITE)) == 0)
RETURN(-EINVAL);
-
+ while (*(--ptr) != '-') ; /* I know it has a - */
strncpy(fsname, devname, ptr - devname);
} else {
/* assume devname is the fsname */
strncpy(fsname, devname, MTI_NAME_MAXLEN);
}
- fsname[MTI_NAME_MAXLEN - 1] = 0;
+ fsname[MTI_NAME_MAXLEN - 1] = '\0';
CDEBUG(D_MGS, "setparam fs='%s' device='%s'\n", fsname, devname);
rc = mgs_find_or_make_fsdb(obd, fsname, &fsdb);
RETURN(rc);
if (!cfs_test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags) &&
cfs_test_bit(FSDB_LOG_EMPTY, &fsdb->fsdb_flags)) {
- CERROR("No filesystem targets for %s. cfg_device from lctl "
- "is '%s'\n", fsname, devname);
+ LCONSOLE_ERROR("setparam: Unknown filesystem '%s'.\n", fsname);
mgs_free_fsdb(obd, fsdb);
- RETURN(-EINVAL);
+ RETURN(-ENOENT);
}
/* Create a fake mti to hold everything */
strncpy(mti->mti_fsname, fsname, MTI_NAME_MAXLEN);
strncpy(mti->mti_svname, devname, MTI_NAME_MAXLEN);
strncpy(mti->mti_params, param, sizeof(mti->mti_params));
- rc = server_name2index(mti->mti_svname, &mti->mti_stripe_index, &tmp);
- if (rc < 0)
- /* Not a valid server; may be only fsname */
- rc = 0;
- else
- /* Strip -osc or -mdc suffix from svname */
- if (server_make_name(rc, mti->mti_stripe_index, mti->mti_fsname,
- mti->mti_svname))
- GOTO(out, rc = -EINVAL);
-
- mti->mti_flags = rc | LDD_F_PARAM;
+ mti->mti_stripe_index = index;
+ mti->mti_flags = type | LDD_F_PARAM;
cfs_down(&fsdb->fsdb_sem);
rc = mgs_write_log_param(obd, fsdb, mti, mti->mti_params);