static inline int name_create(char **newname, char *prefix, char *suffix)
{
- LASSERT(newname);
- OBD_ALLOC(*newname, strlen(prefix) + strlen(suffix) + 1);
- if (!*newname)
- return -ENOMEM;
- sprintf(*newname, "%s%s", prefix, suffix);
- return 0;
+ LASSERT(newname);
+ OBD_ALLOC(*newname, strlen(prefix) + strlen(suffix) + 1);
+ if (!*newname)
+ return -ENOMEM;
+ sprintf(*newname, "%s%s", prefix, suffix);
+ return 0;
}
static inline void name_destroy(char **name)
{
- if (*name)
- OBD_FREE(*name, strlen(*name) + 1);
- *name = NULL;
+ if (*name)
+ OBD_FREE(*name, strlen(*name) + 1);
+ *name = NULL;
}
struct mgs_fsdb_handler_data
{
- struct fs_db *fsdb;
- __u32 ver;
+ struct fs_db *fsdb;
+ __u32 ver;
};
/* from the (client) config log, figure out:
- 1. which ost's/mdt's are configured (by index)
- 2. what the last config step is
- 3. COMPAT_18 osc name
+ * 1. which ost's/mdt's are configured (by index)
+ * 2. what the last config step is
+ * 3. COMPAT_18 osc name
*/
/* It might be better to have a separate db file, instead of parsing the info
out of the client log. This is slow and potentially error-prone. */
struct llog_rec_hdr *rec, void *data)
{
struct mgs_fsdb_handler_data *d = data;
- struct fs_db *fsdb = d->fsdb;
- int cfg_len = rec->lrh_len;
- char *cfg_buf = (char*) (rec + 1);
- struct lustre_cfg *lcfg;
+ struct fs_db *fsdb = d->fsdb;
+ int cfg_len = rec->lrh_len;
+ char *cfg_buf = (char *)(rec + 1);
+ struct lustre_cfg *lcfg;
u32 index;
- int rc = 0;
- ENTRY;
+ int rc = 0;
- if (rec->lrh_type != OBD_CFG_REC) {
- CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
- RETURN(-EINVAL);
- }
+ ENTRY;
+ if (rec->lrh_type != OBD_CFG_REC) {
+ CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
+ RETURN(-EINVAL);
+ }
- rc = lustre_cfg_sanity_check(cfg_buf, cfg_len);
- if (rc) {
- CERROR("Insane cfg\n");
- RETURN(rc);
- }
+ rc = lustre_cfg_sanity_check(cfg_buf, cfg_len);
+ if (rc) {
+ CERROR("Insane cfg\n");
+ RETURN(rc);
+ }
- lcfg = (struct lustre_cfg *)cfg_buf;
+ lcfg = (struct lustre_cfg *)cfg_buf;
- CDEBUG(D_INFO, "cmd %x %s %s\n", lcfg->lcfg_command,
- lustre_cfg_string(lcfg, 0), lustre_cfg_string(lcfg, 1));
+ CDEBUG(D_INFO, "cmd %x %s %s\n", lcfg->lcfg_command,
+ lustre_cfg_string(lcfg, 0), lustre_cfg_string(lcfg, 1));
/* Figure out ost indicies */
/* lov_modify_tgts add 0:lov1 1:ost1_UUID 2(index):0 3(gen):1 */
if (rc)
RETURN(rc);
- CDEBUG(D_MGS, "OST index for %s is %u (%s)\n",
- lustre_cfg_string(lcfg, 1), index,
- lustre_cfg_string(lcfg, 2));
+ CDEBUG(D_MGS, "OST index for %s is %u (%s)\n",
+ lustre_cfg_string(lcfg, 1), index,
+ lustre_cfg_string(lcfg, 2));
set_bit(index, fsdb->fsdb_ost_index_map);
- }
-
- /* Figure out mdt indicies */
- /* 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),
- &index, NULL);
- if (rc != LDD_F_SV_TYPE_MDT) {
- CWARN("Unparsable MDC name %s, assuming index 0\n",
- lustre_cfg_string(lcfg, 0));
- index = 0;
- }
- rc = 0;
- CDEBUG(D_MGS, "MDT index is %u\n", index);
+ }
+
+ /* Figure out mdt indicies */
+ /* 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),
+ &index, NULL);
+ if (rc != LDD_F_SV_TYPE_MDT) {
+ CWARN("Unparsable MDC name %s, assuming index 0\n",
+ lustre_cfg_string(lcfg, 0));
+ index = 0;
+ }
+ rc = 0;
+ CDEBUG(D_MGS, "MDT index is %u\n", index);
if (!test_bit(index, fsdb->fsdb_mdt_index_map)) {
set_bit(index, fsdb->fsdb_mdt_index_map);
fsdb->fsdb_mdt_count++;
RETURN(-EINVAL);
}
- /*
- * compat to 1.8, check osc name used by MDT0 to OSTs, bz18548.
- */
+ /*
+ * compat to 1.8, check osc name used by MDT0 to OSTs, bz18548.
+ */
if (!test_bit(FSDB_OSCNAME18, &fsdb->fsdb_flags) &&
- lcfg->lcfg_command == LCFG_ATTACH &&
- strcmp(lustre_cfg_string(lcfg, 1), LUSTRE_OSC_NAME) == 0) {
- if (OBD_OCD_VERSION_MAJOR(d->ver) == 1 &&
- OBD_OCD_VERSION_MINOR(d->ver) <= 8) {
- CWARN("MDT using 1.8 OSC name scheme\n");
+ lcfg->lcfg_command == LCFG_ATTACH &&
+ strcmp(lustre_cfg_string(lcfg, 1), LUSTRE_OSC_NAME) == 0) {
+ if (OBD_OCD_VERSION_MAJOR(d->ver) == 1 &&
+ OBD_OCD_VERSION_MINOR(d->ver) <= 8) {
+ CWARN("MDT using 1.8 OSC name scheme\n");
set_bit(FSDB_OSCNAME18, &fsdb->fsdb_flags);
- }
- }
+ }
+ }
- if (lcfg->lcfg_command == LCFG_MARKER) {
- struct cfg_marker *marker;
- marker = lustre_cfg_buf(lcfg, 1);
+ if (lcfg->lcfg_command == LCFG_MARKER) {
+ struct cfg_marker *marker;
- d->ver = marker->cm_vers;
+ marker = lustre_cfg_buf(lcfg, 1);
+ d->ver = marker->cm_vers;
- /* Keep track of the latest marker step */
- fsdb->fsdb_gen = max(fsdb->fsdb_gen, marker->cm_step);
- }
+ /* Keep track of the latest marker step */
+ fsdb->fsdb_gen = max(fsdb->fsdb_gen, marker->cm_step);
+ }
- RETURN(rc);
+ RETURN(rc);
}
/* fsdb->fsdb_mutex is already held in mgs_find_or_make_fsdb*/
ENTRY;
ctxt = llog_get_context(mgs->mgs_obd, LLOG_CONFIG_ORIG_CTXT);
- LASSERT(ctxt != NULL);
+ LASSERT(ctxt != NULL);
rc = name_create(&logname, fsdb->fsdb_name, "-client");
if (rc)
GOTO(out_put, rc);
out_close:
llog_close(env, loghandle);
out_pop:
- name_destroy(&logname);
+ name_destroy(&logname);
out_put:
- llog_ctxt_put(ctxt);
+ llog_ctxt_put(ctxt);
- RETURN(rc);
+ RETURN(rc);
}
static void mgs_free_fsdb_srpc(struct fs_db *fsdb)
{
- struct mgs_tgt_srpc_conf *tgtconf;
+ struct mgs_tgt_srpc_conf *tgtconf;
- /* free target-specific rules */
- while (fsdb->fsdb_srpc_tgt) {
- tgtconf = fsdb->fsdb_srpc_tgt;
- fsdb->fsdb_srpc_tgt = tgtconf->mtsc_next;
+ /* free target-specific rules */
+ while (fsdb->fsdb_srpc_tgt) {
+ tgtconf = fsdb->fsdb_srpc_tgt;
+ fsdb->fsdb_srpc_tgt = tgtconf->mtsc_next;
- LASSERT(tgtconf->mtsc_tgt);
+ LASSERT(tgtconf->mtsc_tgt);
- sptlrpc_rule_set_free(&tgtconf->mtsc_rset);
- OBD_FREE(tgtconf->mtsc_tgt, strlen(tgtconf->mtsc_tgt) + 1);
- OBD_FREE_PTR(tgtconf);
- }
+ sptlrpc_rule_set_free(&tgtconf->mtsc_rset);
+ OBD_FREE(tgtconf->mtsc_tgt, strlen(tgtconf->mtsc_tgt) + 1);
+ OBD_FREE_PTR(tgtconf);
+ }
- /* free general rules */
- sptlrpc_rule_set_free(&fsdb->fsdb_srpc_gen);
+ /* free general rules */
+ sptlrpc_rule_set_free(&fsdb->fsdb_srpc_gen);
}
static void mgs_unlink_fsdb(struct mgs_device *mgs, struct fs_db *fsdb)
int mgs_init_fsdb_list(struct mgs_device *mgs)
{
INIT_LIST_HEAD(&mgs->mgs_fs_db_list);
- return 0;
+ return 0;
}
int mgs_cleanup_fsdb_list(struct mgs_device *mgs)
}
/* 1 = index in use
- 0 = index unused
- -1= empty client log */
+ * 0 = index unused
+ * -1= empty client log
+ */
int mgs_check_index(const struct lu_env *env,
struct mgs_device *mgs,
struct mgs_target_info *mti)
{
- struct fs_db *fsdb;
- void *imap;
- int rc = 0;
- ENTRY;
+ struct fs_db *fsdb;
+ void *imap;
+ int rc = 0;
- LASSERT(!(mti->mti_flags & LDD_F_NEED_INDEX));
+ ENTRY;
+ LASSERT(!(mti->mti_flags & LDD_F_NEED_INDEX));
rc = mgs_find_or_make_fsdb(env, mgs, mti->mti_fsname, &fsdb);
- if (rc) {
- CERROR("Can't get db for %s\n", mti->mti_fsname);
- RETURN(rc);
- }
+ if (rc) {
+ CERROR("Can't get db for %s\n", mti->mti_fsname);
+ RETURN(rc);
+ }
if (test_bit(FSDB_LOG_EMPTY, &fsdb->fsdb_flags))
GOTO(out, rc = -1);
static __inline__ int next_index(void *index_map, int map_len)
{
- int i;
- for (i = 0; i < map_len * 8; i++)
- if (!test_bit(i, index_map)) {
- return i;
- }
- CERROR("max index %d exceeded.\n", i);
- return -1;
+ int i;
+
+ for (i = 0; i < map_len * 8; i++)
+ if (!test_bit(i, index_map))
+ return i;
+ CERROR("max index %d exceeded.\n", i);
+ return -1;
}
/* Make the mdt/ost server obd name based on the filesystem name */
}
/* Return codes:
- 0 newly marked as in use
- <0 err
- +EALREADY for update of an old index */
+ * 0 newly marked as in use
+ * <0 err
+ * +EALREADY for update of an old index
+ */
static int mgs_set_index(const struct lu_env *env,
struct mgs_device *mgs,
struct mgs_target_info *mti)
{
- struct fs_db *fsdb;
- void *imap;
- int rc = 0;
- ENTRY;
+ struct fs_db *fsdb;
+ void *imap;
+ int rc = 0;
+
+ ENTRY;
rc = mgs_find_or_make_fsdb(env, mgs, mti->mti_fsname, &fsdb);
- if (rc) {
- CERROR("Can't get db for %s\n", mti->mti_fsname);
- RETURN(rc);
- }
+ if (rc) {
+ CERROR("Can't get db for %s\n", mti->mti_fsname);
+ RETURN(rc);
+ }
mutex_lock(&fsdb->fsdb_mutex);
- if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
- imap = fsdb->fsdb_ost_index_map;
- } else if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
- imap = fsdb->fsdb_mdt_index_map;
- } else {
+ if (mti->mti_flags & LDD_F_SV_TYPE_OST)
+ imap = fsdb->fsdb_ost_index_map;
+ else if (mti->mti_flags & LDD_F_SV_TYPE_MDT)
+ imap = fsdb->fsdb_mdt_index_map;
+ else
GOTO(out_up, rc = -EINVAL);
- }
- if (mti->mti_flags & LDD_F_NEED_INDEX) {
- rc = next_index(imap, INDEX_MAP_SIZE);
- if (rc == -1)
+ if (mti->mti_flags & LDD_F_NEED_INDEX) {
+ rc = next_index(imap, INDEX_MAP_SIZE);
+ if (rc == -1)
GOTO(out_up, rc = -ERANGE);
- mti->mti_stripe_index = rc;
- }
+ mti->mti_stripe_index = rc;
+ }
/* the last index(0xffff) is reserved for default value. */
if (mti->mti_stripe_index >= INDEX_MAP_SIZE * 8 - 1) {
}
if (test_bit(mti->mti_stripe_index, imap)) {
- if ((mti->mti_flags & LDD_F_VIRGIN) &&
- !(mti->mti_flags & LDD_F_WRITECONF)) {
- LCONSOLE_ERROR_MSG(0x140, "Server %s requested index "
- "%d, but that index is already in "
- "use. Use --writeconf to force\n",
- mti->mti_svname,
- mti->mti_stripe_index);
+ if ((mti->mti_flags & LDD_F_VIRGIN) &&
+ !(mti->mti_flags & LDD_F_WRITECONF)) {
+ LCONSOLE_ERROR_MSG(
+ 0x140,
+ "Server %s requested index %d, but that index is already in use. Use --writeconf to force\n",
+ mti->mti_svname,
+ mti->mti_stripe_index);
GOTO(out_up, rc = -EADDRINUSE);
- } else {
- CDEBUG(D_MGS, "Server %s updating index %d\n",
- mti->mti_svname, mti->mti_stripe_index);
+ } else {
+ CDEBUG(D_MGS, "Server %s updating index %d\n",
+ mti->mti_svname, mti->mti_stripe_index);
GOTO(out_up, rc = EALREADY);
}
} else {
}
struct mgs_modify_lookup {
- struct cfg_marker mml_marker;
- int mml_modified;
+ struct cfg_marker mml_marker;
+ int mml_modified;
};
static int mgs_check_record_match(const struct lu_env *env,
int rc;
ENTRY;
-
if (rec->lrh_type != OBD_CFG_REC) {
CDEBUG(D_ERROR, "Unhandled lrh_type: %#x\n", rec->lrh_type);
RETURN(-EINVAL);
struct llog_rec_hdr *rec, void *data)
{
struct mgs_modify_lookup *mml = data;
- struct cfg_marker *marker;
+ struct cfg_marker *marker;
struct lustre_cfg *lcfg = REC_DATA(rec);
int cfg_len = REC_DATA_LEN(rec);
- int rc;
- ENTRY;
-
- if (rec->lrh_type != OBD_CFG_REC) {
- CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
- RETURN(-EINVAL);
- }
-
- rc = lustre_cfg_sanity_check(lcfg, cfg_len);
- if (rc) {
- CERROR("Insane cfg\n");
- RETURN(rc);
- }
-
- /* We only care about markers */
- if (lcfg->lcfg_command != LCFG_MARKER)
- RETURN(0);
-
- marker = lustre_cfg_buf(lcfg, 1);
- if ((strcmp(mml->mml_marker.cm_comment, marker->cm_comment) == 0) &&
- (strcmp(mml->mml_marker.cm_tgtname, marker->cm_tgtname) == 0) &&
- !(marker->cm_flags & CM_SKIP)) {
- /* Found a non-skipped marker match */
- CDEBUG(D_MGS, "Changing rec %u marker %d %x->%x: %s %s\n",
- rec->lrh_index, marker->cm_step,
- marker->cm_flags, mml->mml_marker.cm_flags,
- marker->cm_tgtname, marker->cm_comment);
- /* Overwrite the old marker llog entry */
- marker->cm_flags &= ~CM_EXCLUDE; /* in case we're unexcluding */
- marker->cm_flags |= mml->mml_marker.cm_flags;
- marker->cm_canceltime = mml->mml_marker.cm_canceltime;
+ int rc;
+
+ ENTRY;
+ if (rec->lrh_type != OBD_CFG_REC) {
+ CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
+ RETURN(-EINVAL);
+ }
+
+ rc = lustre_cfg_sanity_check(lcfg, cfg_len);
+ if (rc) {
+ CERROR("Insane cfg\n");
+ RETURN(rc);
+ }
+
+ /* We only care about markers */
+ if (lcfg->lcfg_command != LCFG_MARKER)
+ RETURN(0);
+
+ marker = lustre_cfg_buf(lcfg, 1);
+ if ((strcmp(mml->mml_marker.cm_comment, marker->cm_comment) == 0) &&
+ (strcmp(mml->mml_marker.cm_tgtname, marker->cm_tgtname) == 0) &&
+ !(marker->cm_flags & CM_SKIP)) {
+ /* Found a non-skipped marker match */
+ CDEBUG(D_MGS, "Changing rec %u marker %d %x->%x: %s %s\n",
+ rec->lrh_index, marker->cm_step,
+ marker->cm_flags, mml->mml_marker.cm_flags,
+ marker->cm_tgtname, marker->cm_comment);
+ /* Overwrite the old marker llog entry */
+ marker->cm_flags &= ~CM_EXCLUDE; /* in case we're unexcluding */
+ marker->cm_flags |= mml->mml_marker.cm_flags;
+ marker->cm_canceltime = mml->mml_marker.cm_canceltime;
rc = llog_write(env, llh, rec, rec->lrh_index);
- if (!rc)
- mml->mml_modified++;
- }
+ if (!rc)
+ mml->mml_modified++;
+ }
- RETURN(rc);
+ RETURN(rc);
}
/**
struct fs_db *fsdb, struct mgs_target_info *mti,
char *logname, char *devname, char *comment, int flags)
{
- struct llog_handle *loghandle;
- struct llog_ctxt *ctxt;
- struct mgs_modify_lookup *mml;
+ struct llog_handle *loghandle;
+ struct llog_ctxt *ctxt;
+ struct mgs_modify_lookup *mml;
int rc;
- ENTRY;
+ ENTRY;
LASSERT(mutex_is_locked(&fsdb->fsdb_mutex));
CDEBUG(D_MGS, "modify %s/%s/%s fl=%x\n", logname, devname, comment,
flags);
ctxt = llog_get_context(mgs->mgs_obd, LLOG_CONFIG_ORIG_CTXT);
- LASSERT(ctxt != NULL);
+ LASSERT(ctxt != NULL);
rc = llog_open(env, ctxt, &loghandle, NULL, logname, LLOG_OPEN_EXISTS);
if (rc < 0) {
if (rc == -ENOENT)
}
rc = llog_init_handle(env, loghandle, LLOG_F_IS_PLAIN, NULL);
- if (rc)
- GOTO(out_close, rc);
+ if (rc)
+ GOTO(out_close, rc);
- if (llog_get_size(loghandle) <= 1)
- GOTO(out_close, rc = 0);
+ if (llog_get_size(loghandle) <= 1)
+ GOTO(out_close, rc = 0);
- OBD_ALLOC_PTR(mml);
- if (!mml)
- GOTO(out_close, rc = -ENOMEM);
+ OBD_ALLOC_PTR(mml);
+ if (!mml)
+ GOTO(out_close, rc = -ENOMEM);
if (strlcpy(mml->mml_marker.cm_comment, comment,
sizeof(mml->mml_marker.cm_comment)) >=
sizeof(mml->mml_marker.cm_comment))
sizeof(mml->mml_marker.cm_tgtname)) >=
sizeof(mml->mml_marker.cm_tgtname))
GOTO(out_free, rc = -E2BIG);
- /* Modify mostly means cancel */
- mml->mml_marker.cm_flags = flags;
+ /* Modify mostly means cancel */
+ mml->mml_marker.cm_flags = flags;
mml->mml_marker.cm_canceltime = flags ? ktime_get_real_seconds() : 0;
- mml->mml_modified = 0;
+ mml->mml_modified = 0;
rc = llog_process(env, loghandle, mgs_modify_handler, (void *)mml,
NULL);
if (!rc && !mml->mml_modified)
rc = 1;
out_free:
- OBD_FREE_PTR(mml);
+ OBD_FREE_PTR(mml);
out_close:
llog_close(env, loghandle);
if (rc < 0)
CERROR("%s: modify %s/%s failed: rc = %d\n",
mgs->mgs_obd->obd_name, mti->mti_svname, comment, rc);
- llog_ctxt_put(ctxt);
- RETURN(rc);
+ llog_ctxt_put(ctxt);
+ RETURN(rc);
}
enum replace_state {
}
static int record_base(const struct lu_env *env, struct llog_handle *llh,
- char *cfgname, lnet_nid_t nid, int cmd,
- char *s1, char *s2, char *s3, char *s4)
+ char *cfgname, lnet_nid_t nid, int cmd,
+ char *s1, char *s2, char *s3, char *s4)
{
struct mgs_thread_info *mgi = mgs_env_info(env);
struct llog_cfg_rec *lcr;
}
static int record_lmv_setup(const struct lu_env *env, struct llog_handle *llh,
- char *devname, struct lmv_desc *desc)
+ char *devname, struct lmv_desc *desc)
{
struct mgs_thread_info *mgi = mgs_env_info(env);
struct llog_cfg_rec *lcr;
}
static inline int record_mdc_add(const struct lu_env *env,
- struct llog_handle *llh,
- char *logname, char *mdcuuid,
- char *mdtuuid, char *index,
- char *gen)
+ struct llog_handle *llh,
+ char *logname, char *mdcuuid,
+ char *mdtuuid, char *index,
+ char *gen)
{
return record_base(env,llh,logname,0,LCFG_ADD_MDC,
- mdtuuid,index,gen,mdcuuid);
+ mdtuuid, index, gen, mdcuuid);
}
static inline int record_lov_add(const struct lu_env *env,
- struct llog_handle *llh,
- char *lov_name, char *ost_uuid,
- char *index, char *gen)
+ struct llog_handle *llh,
+ char *lov_name, char *ost_uuid,
+ char *index, char *gen)
{
return record_base(env, llh, lov_name, 0, LCFG_LOV_ADD_OBD,
ost_uuid, index, gen, NULL);
}
static inline int record_mount_opt(const struct lu_env *env,
- struct llog_handle *llh,
- char *profile, char *lov_name,
- char *mdc_name)
+ struct llog_handle *llh,
+ char *profile, char *lov_name,
+ char *mdc_name)
{
return record_base(env, llh, NULL, 0, LCFG_MOUNTOPT,
profile, lov_name, mdc_name, NULL);
static int record_marker(const struct lu_env *env,
struct llog_handle *llh,
- struct fs_db *fsdb, __u32 flags,
- char *tgtname, char *comment)
+ struct fs_db *fsdb, __u32 flags,
+ char *tgtname, char *comment)
{
struct mgs_thread_info *mgi = mgs_env_info(env);
struct llog_cfg_rec *lcr;
GOTO(out, rc = -EBUSY);
ctxt = llog_get_context(mgs->mgs_obd, LLOG_CONFIG_ORIG_CTXT);
- if (!ctxt)
- GOTO(out, rc = -ENODEV);
+ if (!ctxt)
+ GOTO(out, rc = -ENODEV);
LASSERT(ctxt->loc_obd == mgs->mgs_obd);
rc = llog_open_create(env, ctxt, llh, NULL, name);
static int mgs_write_log_osc_to_lov(const struct lu_env *env,
struct mgs_device *mgs,
struct fs_db *fsdb,
- struct mgs_target_info *mti,
+ struct mgs_target_info *mti,
char *logname, char *suffix, char *lovname,
- enum lustre_sec_part sec_part, int flags);
+ enum lustre_sec_part sec_part, int flags);
static int name_create_mdt_and_lov(char **logname, char **lovname,
struct fs_db *fsdb, int i);
{
struct mgs_device *mgs;
struct obd_device *obd;
- struct mgs_target_info *mti, *tmti;
- struct fs_db *fsdb;
- int cfg_len = rec->lrh_len;
- char *cfg_buf = (char*) (rec + 1);
- struct lustre_cfg *lcfg;
- int rc = 0;
- struct llog_handle *mdt_llh = NULL;
- static int got_an_osc_or_mdc = 0;
- /* 0: not found any osc/mdc;
- 1: found osc;
- 2: found mdc;
- */
- static int last_step = -1;
+ struct mgs_target_info *mti, *tmti;
+ struct fs_db *fsdb;
+ int cfg_len = rec->lrh_len;
+ char *cfg_buf = (char *)(rec + 1);
+ struct lustre_cfg *lcfg;
+ int rc = 0;
+ struct llog_handle *mdt_llh = NULL;
+ static int got_an_osc_or_mdc = 0;
+ /* 0: not found any osc/mdc;
+ * 1: found osc;
+ * 2: found mdc;
+ */
+ static int last_step = -1;
int cplen = 0;
- ENTRY;
+ ENTRY;
- mti = ((struct temp_comp*)data)->comp_mti;
- tmti = ((struct temp_comp*)data)->comp_tmti;
- fsdb = ((struct temp_comp*)data)->comp_fsdb;
+ mti = ((struct temp_comp *)data)->comp_mti;
+ tmti = ((struct temp_comp *)data)->comp_tmti;
+ fsdb = ((struct temp_comp *)data)->comp_fsdb;
obd = ((struct temp_comp *)data)->comp_obd;
mgs = lu2mgs_dev(obd->obd_lu_dev);
LASSERT(mgs);
- if (rec->lrh_type != OBD_CFG_REC) {
- CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
- RETURN(-EINVAL);
- }
+ if (rec->lrh_type != OBD_CFG_REC) {
+ CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
+ RETURN(-EINVAL);
+ }
- rc = lustre_cfg_sanity_check(cfg_buf, cfg_len);
- if (rc) {
- CERROR("Insane cfg\n");
- RETURN(rc);
- }
+ rc = lustre_cfg_sanity_check(cfg_buf, cfg_len);
+ if (rc) {
+ CERROR("Insane cfg\n");
+ RETURN(rc);
+ }
- lcfg = (struct lustre_cfg *)cfg_buf;
+ lcfg = (struct lustre_cfg *)cfg_buf;
if (lcfg->lcfg_command == LCFG_MARKER) {
struct cfg_marker *marker;
marker = lustre_cfg_buf(lcfg, 1);
if (!strncmp(marker->cm_comment, "add osc", 7) &&
(marker->cm_flags & CM_START) &&
- !(marker->cm_flags & CM_SKIP)) {
+ !(marker->cm_flags & CM_SKIP)) {
got_an_osc_or_mdc = 1;
cplen = strlcpy(tmti->mti_svname, marker->cm_tgtname,
sizeof(tmti->mti_svname));
}
if (!strncmp(marker->cm_comment, "add osc", 7) &&
(marker->cm_flags & CM_END) &&
- !(marker->cm_flags & CM_SKIP)) {
+ !(marker->cm_flags & CM_SKIP)) {
LASSERT(last_step == marker->cm_step);
last_step = -1;
got_an_osc_or_mdc = 0;
}
if (!strncmp(marker->cm_comment, "add mdc", 7) &&
(marker->cm_flags & CM_START) &&
- !(marker->cm_flags & CM_SKIP)) {
+ !(marker->cm_flags & CM_SKIP)) {
got_an_osc_or_mdc = 2;
last_step = marker->cm_step;
memcpy(tmti->mti_svname, marker->cm_tgtname,
}
if (!strncmp(marker->cm_comment, "add mdc", 7) &&
(marker->cm_flags & CM_END) &&
- !(marker->cm_flags & CM_SKIP)) {
+ !(marker->cm_flags & CM_SKIP)) {
LASSERT(last_step == marker->cm_step);
last_step = -1;
got_an_osc_or_mdc = 0;
}
}
- if (got_an_osc_or_mdc == 0 || last_step < 0)
- RETURN(rc);
+ if (got_an_osc_or_mdc == 0 || last_step < 0)
+ RETURN(rc);
if (lcfg->lcfg_command == LCFG_ADD_UUID) {
__u64 nodenid = lcfg->lcfg_nid;
/* failover node nid */
libcfs_nid2str_r(nodenid, nidstr, sizeof(nidstr));
rc = add_param(tmti->mti_params, PARAM_FAILNODE,
- nidstr);
+ nidstr);
}
RETURN(rc);
}
- if (lcfg->lcfg_command == LCFG_SETUP) {
- char *target;
+ if (lcfg->lcfg_command == LCFG_SETUP) {
+ char *target;
- target = lustre_cfg_string(lcfg, 1);
- memcpy(tmti->mti_uuid, target, strlen(target));
- RETURN(rc);
- }
+ target = lustre_cfg_string(lcfg, 1);
+ memcpy(tmti->mti_uuid, target, strlen(target));
+ RETURN(rc);
+ }
- /* ignore client side sptlrpc_conf_log */
- if (lcfg->lcfg_command == LCFG_SPTLRPC_CONF)
- RETURN(rc);
+ /* ignore client side sptlrpc_conf_log */
+ if (lcfg->lcfg_command == LCFG_SPTLRPC_CONF)
+ RETURN(rc);
if (lcfg->lcfg_command == LCFG_ADD_MDC &&
strstr(lustre_cfg_string(lcfg, 0), "-clilmv") != NULL) {
- int index;
+ int index;
- if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1)
- RETURN (-EINVAL);
+ if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1)
+ RETURN(-EINVAL);
if (index == mti->mti_stripe_index) {
CDEBUG(D_INFO,
"attempt to create MDT%04x->MDT%04x osp device\n",
index, index);
RETURN(0);
}
- memcpy(tmti->mti_fsname, mti->mti_fsname,
- strlen(mti->mti_fsname));
- tmti->mti_stripe_index = index;
+ memcpy(tmti->mti_fsname, mti->mti_fsname,
+ strlen(mti->mti_fsname));
+ tmti->mti_stripe_index = index;
rc = mgs_write_log_osp_to_mdt(env, mgs, fsdb, tmti,
mti->mti_stripe_index,
mti->mti_svname);
- memset(tmti, 0, sizeof(*tmti));
- RETURN(rc);
- }
+ memset(tmti, 0, sizeof(*tmti));
+ RETURN(rc);
+ }
- if (lcfg->lcfg_command == LCFG_LOV_ADD_OBD) {
- int index;
- char mdt_index[9];
- char *logname, *lovname;
+ if (lcfg->lcfg_command == LCFG_LOV_ADD_OBD) {
+ int index;
+ char mdt_index[9];
+ char *logname, *lovname;
rc = name_create_mdt_and_lov(&logname, &lovname, fsdb,
mti->mti_stripe_index);
if (rc)
RETURN(rc);
- sprintf(mdt_index, "-MDT%04x", mti->mti_stripe_index);
+ sprintf(mdt_index, "-MDT%04x", mti->mti_stripe_index);
- if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1) {
- name_destroy(&logname);
- name_destroy(&lovname);
- RETURN(-EINVAL);
- }
+ if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1) {
+ name_destroy(&logname);
+ name_destroy(&lovname);
+ RETURN(-EINVAL);
+ }
- tmti->mti_stripe_index = index;
+ tmti->mti_stripe_index = index;
rc = mgs_write_log_osc_to_lov(env, mgs, fsdb, tmti, logname,
- mdt_index, lovname,
- LUSTRE_SP_MDT, 0);
- name_destroy(&logname);
- name_destroy(&lovname);
- RETURN(rc);
- }
- RETURN(rc);
+ mdt_index, lovname,
+ LUSTRE_SP_MDT, 0);
+ name_destroy(&logname);
+ name_destroy(&lovname);
+ RETURN(rc);
+ }
+ RETURN(rc);
}
/* fsdb->fsdb_mutex is already held in mgs_write_log_target*/
/* stealed from mgs_get_fsdb_from_llog*/
static int mgs_steal_llog_for_mdt_from_client(const struct lu_env *env,
struct mgs_device *mgs,
- char *client_name,
- struct temp_comp* comp)
+ char *client_name,
+ struct temp_comp *comp)
{
- struct llog_handle *loghandle;
- struct mgs_target_info *tmti;
- struct llog_ctxt *ctxt;
+ struct llog_handle *loghandle;
+ struct mgs_target_info *tmti;
+ struct llog_ctxt *ctxt;
int rc;
- ENTRY;
+ ENTRY;
ctxt = llog_get_context(mgs->mgs_obd, LLOG_CONFIG_ORIG_CTXT);
- LASSERT(ctxt != NULL);
+ LASSERT(ctxt != NULL);
- OBD_ALLOC_PTR(tmti);
- if (tmti == NULL)
+ OBD_ALLOC_PTR(tmti);
+ if (tmti == NULL)
GOTO(out_ctxt, rc = -ENOMEM);
comp->comp_tmti = tmti;
static int mgs_write_log_lmv(const struct lu_env *env,
struct mgs_device *mgs,
struct fs_db *fsdb,
- struct mgs_target_info *mti,
- char *logname, char *lmvname)
+ struct mgs_target_info *mti,
+ char *logname, char *lmvname)
{
- struct llog_handle *llh = NULL;
- struct lmv_desc *lmvdesc;
- char *uuid;
- int rc = 0;
- ENTRY;
-
- CDEBUG(D_MGS, "Writing lmv(%s) log for %s\n", lmvname,logname);
-
- OBD_ALLOC_PTR(lmvdesc);
- if (lmvdesc == NULL)
- RETURN(-ENOMEM);
- lmvdesc->ld_active_tgt_count = 0;
- lmvdesc->ld_tgt_count = 0;
- sprintf((char*)lmvdesc->ld_uuid.uuid, "%s_UUID", lmvname);
- uuid = (char *)lmvdesc->ld_uuid.uuid;
+ struct llog_handle *llh = NULL;
+ struct lmv_desc *lmvdesc;
+ char *uuid;
+ int rc = 0;
+
+ ENTRY;
+ CDEBUG(D_MGS, "Writing lmv(%s) log for %s\n", lmvname, logname);
+
+ OBD_ALLOC_PTR(lmvdesc);
+ if (lmvdesc == NULL)
+ RETURN(-ENOMEM);
+ lmvdesc->ld_active_tgt_count = 0;
+ lmvdesc->ld_tgt_count = 0;
+ sprintf((char *)lmvdesc->ld_uuid.uuid, "%s_UUID", lmvname);
+ uuid = (char *)lmvdesc->ld_uuid.uuid;
rc = record_start_log(env, mgs, &llh, logname);
if (rc)
out_end:
record_end_log(env, &llh);
out_free:
- OBD_FREE_PTR(lmvdesc);
- RETURN(rc);
+ OBD_FREE_PTR(lmvdesc);
+ RETURN(rc);
}
/* lov is the first thing in the mdt and client logs */
static int mgs_write_log_lov(const struct lu_env *env, struct mgs_device *mgs,
struct fs_db *fsdb, struct mgs_target_info *mti,
- char *logname, char *lovname)
+ char *logname, char *lovname)
{
- struct llog_handle *llh = NULL;
- struct lov_desc *lovdesc;
- char *uuid;
- int rc = 0;
- ENTRY;
-
- CDEBUG(D_MGS, "Writing lov(%s) log for %s\n", lovname, logname);
-
- /*
- #01 L attach 0:lov_mdsA 1:lov 2:71ccb_lov_mdsA_19f961a9e1
- #02 L lov_setup 0:lov_mdsA 1:(struct lov_desc)
- uuid=lov1_UUID, stripe count=1, size=1048576, offset=0, pattern=0
- */
-
- /* FIXME just make lov_setup accept empty desc (put uuid in buf 2) */
- OBD_ALLOC_PTR(lovdesc);
- if (lovdesc == NULL)
- RETURN(-ENOMEM);
- lovdesc->ld_magic = LOV_DESC_MAGIC;
- lovdesc->ld_tgt_count = 0;
- /* Defaults. Can be changed later by lcfg config_param */
- lovdesc->ld_default_stripe_count = 1;
- lovdesc->ld_pattern = LOV_PATTERN_RAID0;
+ struct llog_handle *llh = NULL;
+ struct lov_desc *lovdesc;
+ char *uuid;
+ int rc = 0;
+
+ ENTRY;
+ CDEBUG(D_MGS, "Writing lov(%s) log for %s\n", lovname, logname);
+
+ /*
+ * #01 L attach 0:lov_mdsA 1:lov 2:71ccb_lov_mdsA_19f961a9e1
+ * #02 L lov_setup 0:lov_mdsA 1:(struct lov_desc)
+ * uuid=lov1_UUID, stripe count=1, size=1048576, offset=0, pattern=0
+ */
+
+ /* FIXME just make lov_setup accept empty desc (put uuid in buf 2) */
+ OBD_ALLOC_PTR(lovdesc);
+ if (lovdesc == NULL)
+ RETURN(-ENOMEM);
+ lovdesc->ld_magic = LOV_DESC_MAGIC;
+ lovdesc->ld_tgt_count = 0;
+ /* Defaults. Can be changed later by lcfg config_param */
+ lovdesc->ld_default_stripe_count = 1;
+ lovdesc->ld_pattern = LOV_PATTERN_RAID0;
lovdesc->ld_default_stripe_size = LOV_DESC_STRIPE_SIZE_DEFAULT;
- lovdesc->ld_default_stripe_offset = -1;
+ lovdesc->ld_default_stripe_offset = -1;
lovdesc->ld_qos_maxage = LOV_DESC_QOS_MAXAGE_DEFAULT;
- sprintf((char*)lovdesc->ld_uuid.uuid, "%s_UUID", lovname);
- /* can these be the same? */
- uuid = (char *)lovdesc->ld_uuid.uuid;
+ sprintf((char *)lovdesc->ld_uuid.uuid, "%s_UUID", lovname);
+ /* can these be the same? */
+ uuid = (char *)lovdesc->ld_uuid.uuid;
- /* This should always be the first entry in a log.
- rc = mgs_clear_log(obd, logname); */
+ /* This should always be the first entry in a log.
+ * rc = mgs_clear_log(obd, logname);
+ */
rc = record_start_log(env, mgs, &llh, logname);
- if (rc)
+ if (rc)
GOTO(out_free, rc);
- /* FIXME these should be a single journal transaction */
+ /* FIXME these should be a single journal transaction */
rc = record_marker(env, llh, fsdb, CM_START, lovname, "lov setup");
if (rc)
GOTO(out_end, rc);
rc = record_marker(env, llh, fsdb, CM_END, lovname, "lov setup");
if (rc)
GOTO(out_end, rc);
- EXIT;
+ EXIT;
out_end:
record_end_log(env, &llh);
out_free:
- OBD_FREE_PTR(lovdesc);
- return rc;
+ OBD_FREE_PTR(lovdesc);
+ return rc;
}
/* add failnids to open log */
static int mgs_write_log_failnids(const struct lu_env *env,
- struct mgs_target_info *mti,
- struct llog_handle *llh,
- char *cliname)
+ struct mgs_target_info *mti,
+ struct llog_handle *llh,
+ char *cliname)
{
- char *failnodeuuid = NULL;
- char *ptr = mti->mti_params;
- lnet_nid_t nid;
- int rc = 0;
-
- /*
- #03 L add_uuid nid=uml1@tcp(0x20000c0a80201) nal=90 0: 1:uml1_UUID
- #04 L add_uuid nid=1@elan(0x1000000000001) nal=90 0: 1:uml1_UUID
- #05 L setup 0:OSC_uml1_ost1_mdsA 1:ost1_UUID 2:uml1_UUID
- #06 L add_uuid nid=uml2@tcp(0x20000c0a80202) nal=90 0: 1:uml2_UUID
- #0x L add_uuid nid=2@elan(0x1000000000002) nal=90 0: 1:uml2_UUID
- #07 L add_conn 0:OSC_uml1_ost1_mdsA 1:uml2_UUID
- */
+ char *failnodeuuid = NULL;
+ char *ptr = mti->mti_params;
+ lnet_nid_t nid;
+ int rc = 0;
+
+ /*
+ * #03 L add_uuid nid=uml1@tcp(0x20000c0a80201) nal=90 0: 1:uml1_UUID
+ * #04 L add_uuid nid=1@elan(0x1000000000001) nal=90 0: 1:uml1_UUID
+ * #05 L setup 0:OSC_uml1_ost1_mdsA 1:ost1_UUID 2:uml1_UUID
+ * #06 L add_uuid nid=uml2@tcp(0x20000c0a80202) nal=90 0: 1:uml2_UUID
+ * #0x L add_uuid nid=2@elan(0x1000000000002) nal=90 0: 1:uml2_UUID
+ * #07 L add_conn 0:OSC_uml1_ost1_mdsA 1:uml2_UUID
+ */
/*
* Pull failnid info out of params string, which may contain something
if (rc != 0)
return rc;
}
- CDEBUG(D_MGS, "add nid %s for failover uuid %s, "
- "client %s\n",
- libcfs_nid2str_r(nid, nidstr, sizeof(nidstr)),
- failnodeuuid, cliname);
+ CDEBUG(D_MGS,
+ "add nid %s for failover uuid %s, client %s\n",
+ libcfs_nid2str_r(nid, nidstr, sizeof(nidstr)),
+ failnodeuuid, cliname);
rc = record_add_uuid(env, llh, nid, failnodeuuid);
/*
* If *ptr is ':', we have added all NIDs for
static int mgs_write_log_mdc_to_lmv(const struct lu_env *env,
struct mgs_device *mgs,
struct fs_db *fsdb,
- struct mgs_target_info *mti,
- char *logname, char *lmvname)
+ struct mgs_target_info *mti,
+ char *logname, char *lmvname)
{
- struct llog_handle *llh = NULL;
+ struct llog_handle *llh = NULL;
char *mdcname = NULL;
char *nodeuuid = NULL;
char *mdcuuid = NULL;
ENTRY;
if (mgs_log_is_empty(env, mgs, logname)) {
- CERROR("log is empty! Logical error\n");
- RETURN(-EINVAL);
- }
+ CERROR("log is empty! Logical error\n");
+ RETURN(-EINVAL);
+ }
- CDEBUG(D_MGS, "adding mdc for %s to log %s:lmv(%s)\n",
- mti->mti_svname, logname, lmvname);
+ CDEBUG(D_MGS, "adding mdc for %s to log %s:lmv(%s)\n",
+ mti->mti_svname, logname, lmvname);
libcfs_nid2str_r(mti->mti_nids[0], nidstr, sizeof(nidstr));
rc = name_create(&nodeuuid, nidstr, "");
if (rc)
GOTO(out_free, rc);
rc = record_marker(env, llh, fsdb, CM_START, mti->mti_svname,
- "add mdc");
+ "add mdc");
if (rc)
GOTO(out_end, rc);
for (i = 0; i < mti->mti_nid_count; i++) {
CDEBUG(D_MGS, "add nid %s for mdt\n",
- libcfs_nid2str_r(mti->mti_nids[i],
- nidstr, sizeof(nidstr)));
+ libcfs_nid2str_r(mti->mti_nids[i],
+ nidstr, sizeof(nidstr)));
rc = record_add_uuid(env, llh, mti->mti_nids[i], nodeuuid);
if (rc)
rc = mgs_write_log_failnids(env, mti, llh, mdcname);
if (rc)
GOTO(out_end, rc);
- snprintf(index, sizeof(index), "%d", mti->mti_stripe_index);
+ snprintf(index, sizeof(index), "%d", mti->mti_stripe_index);
rc = record_mdc_add(env, llh, lmvname, mdcuuid, mti->mti_uuid,
- index, "1");
+ index, "1");
if (rc)
GOTO(out_end, rc);
rc = record_marker(env, llh, fsdb, CM_END, mti->mti_svname,
- "add mdc");
+ "add mdc");
if (rc)
GOTO(out_end, rc);
out_end:
record_end_log(env, &llh);
out_free:
- name_destroy(&lmvuuid);
- name_destroy(&mdcuuid);
- name_destroy(&mdcname);
- name_destroy(&nodeuuid);
- RETURN(rc);
+ name_destroy(&lmvuuid);
+ name_destroy(&mdcuuid);
+ name_destroy(&mdcname);
+ name_destroy(&nodeuuid);
+ RETURN(rc);
}
static inline int name_create_lov(char **lovname, char *mdtname,
ENTRY;
if (mgs_log_is_empty(env, mgs, mti->mti_svname)) {
- CERROR("log is empty! Logical error\n");
- RETURN (-EINVAL);
- }
+ CERROR("log is empty! Logical error\n");
+ RETURN(-EINVAL);
+ }
CDEBUG(D_MGS, "adding osp index %d to %s\n", mti->mti_stripe_index,
logname);
for (i = 0; i < mti->mti_nid_count; i++) {
CDEBUG(D_MGS, "add nid %s for mdt\n",
- libcfs_nid2str_r(mti->mti_nids[i],
- nidstr, sizeof(nidstr)));
+ libcfs_nid2str_r(mti->mti_nids[i],
+ nidstr, sizeof(nidstr)));
rc = record_add_uuid(env, llh, mti->mti_nids[i], nodeuuid);
if (rc)
GOTO(out_end, rc);
name_destroy(&lovname);
name_destroy(&ospname);
name_destroy(&svname);
- name_destroy(&nodeuuid);
+ name_destroy(&nodeuuid);
name_destroy(&mdtname);
RETURN(rc);
}
struct fs_db *fsdb,
struct mgs_target_info *mti)
{
- char *log = mti->mti_svname;
- struct llog_handle *llh = NULL;
+ char *log = mti->mti_svname;
+ struct llog_handle *llh = NULL;
struct obd_uuid *uuid;
char *lovname;
- char mdt_index[6];
- char *ptr = mti->mti_params;
- int rc = 0, failout = 0;
- ENTRY;
+ char mdt_index[6];
+ char *ptr = mti->mti_params;
+ int rc = 0, failout = 0;
+ ENTRY;
OBD_ALLOC_PTR(uuid);
- if (uuid == NULL)
- RETURN(-ENOMEM);
+ if (uuid == NULL)
+ RETURN(-ENOMEM);
- if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
- failout = (strncmp(ptr, "failout", 7) == 0);
+ if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
+ failout = (strncmp(ptr, "failout", 7) == 0);
rc = name_create(&lovname, log, "-mdtlov");
if (rc)
GOTO(out_lod, rc);
}
- sprintf(mdt_index, "%d", mti->mti_stripe_index);
+ sprintf(mdt_index, "%d", mti->mti_stripe_index);
rc = record_start_log(env, mgs, &llh, log);
if (rc)
/* add MDT itself */
- /* FIXME this whole fn should be a single journal transaction */
+ /* FIXME this whole fn should be a single journal transaction */
sprintf(uuid->uuid, "%s_UUID", log);
rc = record_marker(env, llh, fsdb, CM_START, log, "add mdt");
if (rc)
if (rc)
GOTO(out_end, rc);
rc = record_setup(env, llh, log, uuid->uuid, mdt_index, lovname,
- failout ? "n" : "f");
+ failout ? "n" : "f");
if (rc)
GOTO(out_end, rc);
rc = record_marker(env, llh, fsdb, CM_END, log, "add mdt");
out_lod:
name_destroy(&lovname);
out_free:
- OBD_FREE_PTR(uuid);
- RETURN(rc);
+ OBD_FREE_PTR(uuid);
+ RETURN(rc);
}
/* envelope method for all layers log */
struct mgs_target_info *mti)
{
struct mgs_thread_info *mgi = mgs_env_info(env);
- struct llog_handle *llh = NULL;
- char *cliname;
- int rc, i = 0;
- ENTRY;
+ struct llog_handle *llh = NULL;
+ char *cliname;
+ int rc, i = 0;
- CDEBUG(D_MGS, "writing new mdt %s\n", mti->mti_svname);
+ ENTRY;
+ CDEBUG(D_MGS, "writing new mdt %s\n", mti->mti_svname);
- if (mti->mti_uuid[0] == '\0') {
- /* Make up our own uuid */
- snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
- "%s_UUID", mti->mti_svname);
- }
+ if (mti->mti_uuid[0] == '\0') {
+ /* Make up our own uuid */
+ snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
+ "%s_UUID", mti->mti_svname);
+ }
- /* add mdt */
+ /* add mdt */
rc = mgs_write_log_mdt0(env, mgs, fsdb, mti);
if (rc)
RETURN(rc);
- /* Append the mdt info to the client log */
+ /* Append the mdt info to the client log */
rc = name_create(&cliname, mti->mti_fsname, "-client");
if (rc)
RETURN(rc);
if (mgs_log_is_empty(env, mgs, cliname)) {
- /* Start client log */
+ /* Start client log */
rc = mgs_write_log_lov(env, mgs, fsdb, mti, cliname,
- fsdb->fsdb_clilov);
+ fsdb->fsdb_clilov);
if (rc)
GOTO(out_free, rc);
rc = mgs_write_log_lmv(env, mgs, fsdb, mti, cliname,
- fsdb->fsdb_clilmv);
+ fsdb->fsdb_clilmv);
if (rc)
GOTO(out_free, rc);
rc = mgs_write_log_mount_opt(env, mgs, fsdb, cliname);
if (rc)
GOTO(out_free, rc);
- }
+ }
- /*
- #09 L add_uuid nid=uml1@tcp(0x20000c0a80201) 0: 1:uml1_UUID
- #10 L attach 0:MDC_uml1_mdsA_MNT_client 1:mdc 2:1d834_MNT_client_03f
- #11 L setup 0:MDC_uml1_mdsA_MNT_client 1:mdsA_UUID 2:uml1_UUID
- #12 L add_uuid nid=uml2@tcp(0x20000c0a80202) 0: 1:uml2_UUID
- #13 L add_conn 0:MDC_uml1_mdsA_MNT_client 1:uml2_UUID
- */
+ /*
+ * #09 L add_uuid nid=uml1@tcp(0x20000c0a80201) 0: 1:uml1_UUID
+ * #10 L attach 0:MDC_uml1_mdsA_MNT_client 1:mdc 2:1d834_MNT_client_03f
+ * #11 L setup 0:MDC_uml1_mdsA_MNT_client 1:mdsA_UUID 2:uml1_UUID
+ * #12 L add_uuid nid=uml2@tcp(0x20000c0a80202) 0: 1:uml2_UUID
+ * #13 L add_conn 0:MDC_uml1_mdsA_MNT_client 1:uml2_UUID
+ */
/* copy client info about lov/lmv */
mgi->mgi_comp.comp_mti = mti;
record_end_log(env, &llh);
out_free:
name_destroy(&cliname);
- RETURN(rc);
+ RETURN(rc);
}
/* Add the ost info to the client/mdt lov */
static int mgs_write_log_osc_to_lov(const struct lu_env *env,
struct mgs_device *mgs, struct fs_db *fsdb,
- struct mgs_target_info *mti,
- char *logname, char *suffix, char *lovname,
- enum lustre_sec_part sec_part, int flags)
+ struct mgs_target_info *mti,
+ char *logname, char *suffix, char *lovname,
+ enum lustre_sec_part sec_part, int flags)
{
struct llog_handle *llh = NULL;
char *nodeuuid = NULL;
ENTRY;
CDEBUG(D_INFO, "adding osc for %s to log %s\n",
- mti->mti_svname, logname);
+ mti->mti_svname, logname);
if (mgs_log_is_empty(env, mgs, logname)) {
CERROR("log is empty! Logical error\n");
if (rc)
GOTO(out_free, rc);
-
- /*
- #03 L add_uuid nid=uml1@tcp(0x20000c0a80201) 0: 1:uml1_UUID
- multihomed (#4)
- #04 L add_uuid nid=1@elan(0x1000000000001) nal=90 0: 1:uml1_UUID
- #04 L attach 0:OSC_uml1_ost1_MNT_client 1:osc 2:89070_lov1_a41dff51a
- #05 L setup 0:OSC_uml1_ost1_MNT_client 1:ost1_UUID 2:uml1_UUID
- failover (#6,7)
- #06 L add_uuid nid=uml2@tcp(0x20000c0a80202) 0: 1:uml2_UUID
- #07 L add_conn 0:OSC_uml1_ost1_MNT_client 1:uml2_UUID
- #08 L lov_modify_tgts add 0:lov1 1:ost1_UUID 2(index):0 3(gen):1
- */
+ /*
+ * #03 L add_uuid nid=uml1@tcp(0x20000c0a80201) 0: 1:uml1_UUID
+ * multihomed (#4)
+ * #04 L add_uuid nid=1@elan(0x1000000000001) nal=90 0: 1:uml1_UUID
+ * #04 L attach 0:OSC_uml1_ost1_MNT_client 1:osc 2:89070_lov1_a41dff51a
+ * #05 L setup 0:OSC_uml1_ost1_MNT_client 1:ost1_UUID 2:uml1_UUID
+ * failover (#6,7)
+ * #06 L add_uuid nid=uml2@tcp(0x20000c0a80202) 0: 1:uml2_UUID
+ * #07 L add_conn 0:OSC_uml1_ost1_MNT_client 1:uml2_UUID
+ * #08 L lov_modify_tgts add 0:lov1 1:ost1_UUID 2(index):0 3(gen):1
+ */
rc = record_start_log(env, mgs, &llh, logname);
- if (rc)
+ if (rc)
GOTO(out_free, rc);
- /* FIXME these should be a single journal transaction */
+ /* FIXME these should be a single journal transaction */
rc = record_marker(env, llh, fsdb, CM_START | flags, mti->mti_svname,
- "add osc");
+ "add osc");
if (rc)
GOTO(out_end, rc);
*/
for (i = 0; i < mti->mti_nid_count; i++) {
CDEBUG(D_MGS, "add nid %s\n",
- libcfs_nid2str_r(mti->mti_nids[i],
- nidstr, sizeof(nidstr)));
+ libcfs_nid2str_r(mti->mti_nids[i],
+ nidstr, sizeof(nidstr)));
rc = record_add_uuid(env, llh, mti->mti_nids[i], nodeuuid);
if (rc)
GOTO(out_end, rc);
if (rc)
GOTO(out_end, rc);
rc = record_marker(env, llh, fsdb, CM_END | flags, mti->mti_svname,
- "add osc");
+ "add osc");
if (rc)
GOTO(out_end, rc);
out_end:
name_destroy(&oscname);
name_destroy(&svname);
name_destroy(&nodeuuid);
- RETURN(rc);
+ RETURN(rc);
}
static int mgs_write_log_ost(const struct lu_env *env,
struct mgs_device *mgs, struct fs_db *fsdb,
- struct mgs_target_info *mti)
+ struct mgs_target_info *mti)
{
- struct llog_handle *llh = NULL;
- char *logname, *lovname;
- char *ptr = mti->mti_params;
- int rc, flags = 0, failout = 0, i;
- ENTRY;
+ struct llog_handle *llh = NULL;
+ char *logname, *lovname;
+ char *ptr = mti->mti_params;
+ int rc, flags = 0, failout = 0, i;
- CDEBUG(D_MGS, "writing new ost %s\n", mti->mti_svname);
+ ENTRY;
+ CDEBUG(D_MGS, "writing new ost %s\n", mti->mti_svname);
- /* The ost startup log */
+ /* The ost startup log */
- /* If the ost log already exists, that means that someone reformatted
- the ost and it called target_add again. */
+ /* If the ost log already exists, that means that someone reformatted
+ * the ost and it called target_add again.
+ */
if (!mgs_log_is_empty(env, mgs, mti->mti_svname)) {
- LCONSOLE_ERROR_MSG(0x141, "The config log for %s already "
- "exists, yet the server claims it never "
- "registered. It may have been reformatted, "
- "or the index changed. writeconf the MDT to "
- "regenerate all logs.\n", mti->mti_svname);
- RETURN(-EALREADY);
- }
-
- /*
- attach obdfilter ost1 ost1_UUID
- setup /dev/loop2 ldiskfs f|n errors=remount-ro,user_xattr
- */
- if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
- failout = (strncmp(ptr, "failout", 7) == 0);
+ LCONSOLE_ERROR_MSG(0x141,
+ "The config log for %s already exists, yet the server claims it never registered. It may have been reformatted, or the index changed. writeconf the MDT to regenerate all logs.\n",
+ mti->mti_svname);
+ RETURN(-EALREADY);
+ }
+
+ /*
+ * attach obdfilter ost1 ost1_UUID
+ * setup /dev/loop2 ldiskfs f|n errors=remount-ro,user_xattr
+ */
+ if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
+ failout = (strncmp(ptr, "failout", 7) == 0);
rc = record_start_log(env, mgs, &llh, mti->mti_svname);
- if (rc)
- RETURN(rc);
- /* FIXME these should be a single journal transaction */
+ if (rc)
+ RETURN(rc);
+ /* FIXME these should be a single journal transaction */
rc = record_marker(env, llh, fsdb, CM_START, mti->mti_svname,"add ost");
if (rc)
GOTO(out_end, rc);
- if (*mti->mti_uuid == '\0')
- snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
- "%s_UUID", mti->mti_svname);
+ if (*mti->mti_uuid == '\0')
+ snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
+ "%s_UUID", mti->mti_svname);
rc = record_attach(env, llh, mti->mti_svname,
- "obdfilter"/*LUSTRE_OST_NAME*/, mti->mti_uuid);
+ "obdfilter"/*LUSTRE_OST_NAME*/, mti->mti_uuid);
if (rc)
GOTO(out_end, rc);
rc = record_setup(env, llh, mti->mti_svname,
- "dev"/*ignored*/, "type"/*ignored*/,
+ "dev"/*ignored*/, "type"/*ignored*/,
failout ? "n" : "f", NULL/*options*/);
if (rc)
GOTO(out_end, rc);
record_end_log(env, &llh);
if (rc)
RETURN(rc);
- /* We also have to update the other logs where this osc is part of
- the lov */
+ /* We also have to update the other logs where this osc is part of
+ * the lov
+ */
if (test_bit(FSDB_OLDLOG14, &fsdb->fsdb_flags)) {
- /* If we're upgrading, the old mdt log already has our
- entry. Let's do a fake one for fun. */
- /* Note that we can't add any new failnids, since we don't
- know the old osc names. */
- flags = CM_SKIP | CM_UPGRADE146;
-
- } else if ((mti->mti_flags & LDD_F_UPDATE) != LDD_F_UPDATE) {
- /* If the update flag isn't set, don't update client/mdt
- logs. */
- flags |= CM_SKIP;
- LCONSOLE_WARN("Client log for %s was not updated; writeconf "
- "the MDT first to regenerate it.\n",
- mti->mti_svname);
- }
-
- /* Add ost to all MDT lov defs */
- for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
+ /* If we're upgrading, the old mdt log already has our
+ * entry. Let's do a fake one for fun.
+ */
+ /* Note that we can't add any new failnids, since we don't
+ * know the old osc names.
+ */
+ flags = CM_SKIP | CM_UPGRADE146;
+ } else if ((mti->mti_flags & LDD_F_UPDATE) != LDD_F_UPDATE) {
+ /* If the update flag isn't set, don't update client/mdt
+ * logs.
+ */
+ flags |= CM_SKIP;
+ LCONSOLE_WARN("Client log for %s was not updated; writeconf the MDT first to regenerate it.\n",
+ mti->mti_svname);
+ }
+
+ /* Add ost to all MDT lov defs */
+ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
if (test_bit(i, fsdb->fsdb_mdt_index_map)) {
char mdt_index[13];
logname, mdt_index,
lovname, LUSTRE_SP_MDT,
flags);
- name_destroy(&logname);
- name_destroy(&lovname);
+ name_destroy(&logname);
+ name_destroy(&lovname);
if (rc)
RETURN(rc);
- }
- }
+ }
+ }
- /* Append ost info to the client log */
+ /* Append ost info to the client log */
rc = name_create(&logname, mti->mti_fsname, "-client");
if (rc)
RETURN(rc);
if (mgs_log_is_empty(env, mgs, logname)) {
- /* Start client log */
+ /* Start client log */
rc = mgs_write_log_lov(env, mgs, fsdb, mti, logname,
- fsdb->fsdb_clilov);
+ fsdb->fsdb_clilov);
if (rc)
GOTO(out_free, rc);
rc = mgs_write_log_lmv(env, mgs, fsdb, mti, logname,
- fsdb->fsdb_clilmv);
+ fsdb->fsdb_clilmv);
if (rc)
GOTO(out_free, rc);
rc = mgs_write_log_mount_opt(env, mgs, fsdb, logname);
if (rc)
GOTO(out_free, rc);
- }
+ }
rc = mgs_write_log_osc_to_lov(env, mgs, fsdb, mti, logname, "",
fsdb->fsdb_clilov, LUSTRE_SP_CLI, flags);
out_free:
- name_destroy(&logname);
- RETURN(rc);
+ name_destroy(&logname);
+ RETURN(rc);
}
static __inline__ int mgs_param_empty(char *ptr)
{
- char *tmp;
+ char *tmp = strchr(ptr, '=');
- if ((tmp = strchr(ptr, '=')) && (*(++tmp) == '\0'))
- return 1;
- return 0;
+ if (tmp && tmp[1] == '\0')
+ return 1;
+ return 0;
}
static int mgs_write_log_failnid_internal(const struct lu_env *env,
struct mgs_device *mgs,
- struct fs_db *fsdb,
- struct mgs_target_info *mti,
- char *logname, char *cliname)
+ struct fs_db *fsdb,
+ struct mgs_target_info *mti,
+ char *logname, char *cliname)
{
- int rc;
- struct llog_handle *llh = NULL;
+ int rc;
+ struct llog_handle *llh = NULL;
- if (mgs_param_empty(mti->mti_params)) {
- /* Remove _all_ failnids */
+ if (mgs_param_empty(mti->mti_params)) {
+ /* Remove _all_ failnids */
rc = mgs_modify(env, mgs, fsdb, mti, logname,
- mti->mti_svname, "add failnid", CM_SKIP);
+ mti->mti_svname, "add failnid", CM_SKIP);
return rc < 0 ? rc : 0;
- }
+ }
- /* Otherwise failover nids are additive */
+ /* Otherwise failover nids are additive */
rc = record_start_log(env, mgs, &llh, logname);
if (rc)
return rc;
- /* FIXME this should be a single journal transaction */
+ /* FIXME this should be a single journal transaction */
rc = record_marker(env, llh, fsdb, CM_START, mti->mti_svname,
"add failnid");
if (rc)
mti->mti_svname, "add failnid");
out_end:
record_end_log(env, &llh);
- return rc;
+ return rc;
}
-
/* Add additional failnids to an existing log.
The mdc/osc must have been added to logs first */
/* tcp nids must be in dotted-quad ascii -
static int mgs_write_log_add_failnid(const struct lu_env *env,
struct mgs_device *mgs,
struct fs_db *fsdb,
- struct mgs_target_info *mti)
+ struct mgs_target_info *mti)
{
- char *logname, *cliname;
- int rc;
- ENTRY;
+ char *logname, *cliname;
+ int rc;
- /* FIXME we currently can't erase the failnids
- * given when a target first registers, since they aren't part of
+ ENTRY;
+ /* FIXME we currently can't erase the failnids
+ * given when a target first registers, since they aren't part of
* an "add uuid" stanza
*/
- /* Verify that we know about this target */
+ /* Verify that we know about this target */
if (mgs_log_is_empty(env, mgs, mti->mti_svname)) {
- LCONSOLE_ERROR_MSG(0x142, "The target %s has not registered "
- "yet. It must be started before failnids "
- "can be added.\n", mti->mti_svname);
- RETURN(-ENOENT);
- }
-
- /* Create mdc/osc client name (e.g. lustre-OST0001-osc) */
- if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
+ LCONSOLE_ERROR_MSG(0x142,
+ "The target %s has not registered yet. It must be started before failnids can be added.\n",
+ mti->mti_svname);
+ RETURN(-ENOENT);
+ }
+
+ /* Create mdc/osc client name (e.g. lustre-OST0001-osc) */
+ if (mti->mti_flags & LDD_F_SV_TYPE_MDT)
rc = name_create(&cliname, mti->mti_svname, "-mdc");
- } else if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ else if (mti->mti_flags & LDD_F_SV_TYPE_OST)
rc = name_create(&cliname, mti->mti_svname, "-osc");
- } else {
- RETURN(-EINVAL);
- }
+ else
+ RETURN(-EINVAL);
+
if (rc)
RETURN(rc);
- /* Add failover nids to the client log */
+ /* Add failover nids to the client log */
rc = name_create(&logname, mti->mti_fsname, "-client");
if (rc) {
name_destroy(&cliname);
}
rc = mgs_write_log_failnid_internal(env, mgs, fsdb,mti,logname,cliname);
- name_destroy(&logname);
- name_destroy(&cliname);
+ name_destroy(&logname);
+ name_destroy(&cliname);
if (rc)
RETURN(rc);
- if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
- /* Add OST failover nids to the MDT logs as well */
- int i;
+ if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
+ /* Add OST failover nids to the MDT logs as well */
+ int i;
- for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
+ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
if (!test_bit(i, fsdb->fsdb_mdt_index_map))
- continue;
+ continue;
rc = name_create_mdt(&logname, mti->mti_fsname, i);
if (rc)
RETURN(rc);
rc = mgs_write_log_failnid_internal(env, mgs, fsdb,
mti, logname,
cliname);
- name_destroy(&cliname);
- name_destroy(&logname);
+ name_destroy(&cliname);
+ name_destroy(&logname);
if (rc)
RETURN(rc);
- }
- }
+ }
+ }
- RETURN(rc);
+ RETURN(rc);
}
static int mgs_wlp_lcfg(const struct lu_env *env,
static int mgs_srpc_set_param_disk(const struct lu_env *env,
struct mgs_device *mgs,
- struct fs_db *fsdb,
- struct mgs_target_info *mti,
- char *param)
+ struct fs_db *fsdb,
+ struct mgs_target_info *mti,
+ char *param)
{
struct mgs_thread_info *mgi = mgs_env_info(env);
struct llog_cfg_rec *lcr;
}
static int mgs_srpc_set_param_udesc_mem(struct fs_db *fsdb,
- char *param)
+ char *param)
{
- char *ptr;
+ char *ptr;
- /* disable the adjustable udesc parameter for now, i.e. use default
- * setting that client always ship udesc to MDT if possible. to enable
- * it simply remove the following line */
- goto error_out;
+ /* disable the adjustable udesc parameter for now, i.e. use default
+ * setting that client always ship udesc to MDT if possible. to enable
+ * it simply remove the following line
+ */
+ goto error_out;
- ptr = strchr(param, '=');
- if (ptr == NULL)
- goto error_out;
- *ptr++ = '\0';
+ ptr = strchr(param, '=');
+ if (ptr == NULL)
+ goto error_out;
+ *ptr++ = '\0';
- if (strcmp(param, PARAM_SRPC_UDESC))
- goto error_out;
+ if (strcmp(param, PARAM_SRPC_UDESC))
+ goto error_out;
- if (strcmp(ptr, "yes") == 0) {
+ if (strcmp(ptr, "yes") == 0) {
set_bit(FSDB_UDESC, &fsdb->fsdb_flags);
- CWARN("Enable user descriptor shipping from client to MDT\n");
- } else if (strcmp(ptr, "no") == 0) {
+ CWARN("Enable user descriptor shipping from client to MDT\n");
+ } else if (strcmp(ptr, "no") == 0) {
clear_bit(FSDB_UDESC, &fsdb->fsdb_flags);
- CWARN("Disable user descriptor shipping from client to MDT\n");
- } else {
- *(ptr - 1) = '=';
- goto error_out;
- }
- return 0;
+ CWARN("Disable user descriptor shipping from client to MDT\n");
+ } else {
+ *(ptr - 1) = '=';
+ goto error_out;
+ }
+ return 0;
error_out:
- CERROR("Invalid param: %s\n", param);
- return -EINVAL;
+ CERROR("Invalid param: %s\n", param);
+ return -EINVAL;
}
static int mgs_srpc_set_param_mem(struct fs_db *fsdb,
- const char *svname,
- char *param)
+ const char *svname,
+ char *param)
{
- struct sptlrpc_rule rule;
- struct sptlrpc_rule_set *rset;
- int rc;
- ENTRY;
+ struct sptlrpc_rule rule;
+ struct sptlrpc_rule_set *rset;
+ int rc;
- if (strncmp(param, PARAM_SRPC, sizeof(PARAM_SRPC) - 1) != 0) {
- CERROR("Invalid sptlrpc parameter: %s\n", param);
- RETURN(-EINVAL);
- }
+ ENTRY;
+ if (strncmp(param, PARAM_SRPC, sizeof(PARAM_SRPC) - 1) != 0) {
+ CERROR("Invalid sptlrpc parameter: %s\n", param);
+ RETURN(-EINVAL);
+ }
- if (strncmp(param, PARAM_SRPC_UDESC,
- sizeof(PARAM_SRPC_UDESC) - 1) == 0) {
- RETURN(mgs_srpc_set_param_udesc_mem(fsdb, param));
- }
+ if (strncmp(param, PARAM_SRPC_UDESC,
+ sizeof(PARAM_SRPC_UDESC) - 1) == 0) {
+ RETURN(mgs_srpc_set_param_udesc_mem(fsdb, param));
+ }
- if (strncmp(param, PARAM_SRPC_FLVR, sizeof(PARAM_SRPC_FLVR) - 1) != 0) {
- CERROR("Invalid sptlrpc flavor parameter: %s\n", param);
- RETURN(-EINVAL);
- }
+ if (strncmp(param, PARAM_SRPC_FLVR, sizeof(PARAM_SRPC_FLVR) - 1) != 0) {
+ CERROR("Invalid sptlrpc flavor parameter: %s\n", param);
+ RETURN(-EINVAL);
+ }
- param += sizeof(PARAM_SRPC_FLVR) - 1;
+ param += sizeof(PARAM_SRPC_FLVR) - 1;
- rc = sptlrpc_parse_rule(param, &rule);
- if (rc)
- RETURN(rc);
+ rc = sptlrpc_parse_rule(param, &rule);
+ if (rc)
+ RETURN(rc);
- /* mgs rules implies must be mgc->mgs */
+ /* mgs rules implies must be mgc->mgs */
if (test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags)) {
- if ((rule.sr_from != LUSTRE_SP_MGC &&
- rule.sr_from != LUSTRE_SP_ANY) ||
- (rule.sr_to != LUSTRE_SP_MGS &&
- rule.sr_to != LUSTRE_SP_ANY))
- RETURN(-EINVAL);
- }
-
- /* preapre room for this coming rule. svcname format should be:
- * - fsname: general rule
- * - fsname-tgtname: target-specific rule
- */
- if (strchr(svname, '-')) {
- struct mgs_tgt_srpc_conf *tgtconf;
- int found = 0;
-
- for (tgtconf = fsdb->fsdb_srpc_tgt; tgtconf != NULL;
- tgtconf = tgtconf->mtsc_next) {
- if (!strcmp(tgtconf->mtsc_tgt, svname)) {
- found = 1;
- break;
- }
- }
-
- if (!found) {
- int name_len;
-
- OBD_ALLOC_PTR(tgtconf);
- if (tgtconf == NULL)
- RETURN(-ENOMEM);
-
- name_len = strlen(svname);
-
- OBD_ALLOC(tgtconf->mtsc_tgt, name_len + 1);
- if (tgtconf->mtsc_tgt == NULL) {
- OBD_FREE_PTR(tgtconf);
- RETURN(-ENOMEM);
- }
- memcpy(tgtconf->mtsc_tgt, svname, name_len);
-
- tgtconf->mtsc_next = fsdb->fsdb_srpc_tgt;
- fsdb->fsdb_srpc_tgt = tgtconf;
- }
-
- rset = &tgtconf->mtsc_rset;
+ if ((rule.sr_from != LUSTRE_SP_MGC &&
+ rule.sr_from != LUSTRE_SP_ANY) ||
+ (rule.sr_to != LUSTRE_SP_MGS &&
+ rule.sr_to != LUSTRE_SP_ANY))
+ RETURN(-EINVAL);
+ }
+
+ /* preapre room for this coming rule. svcname format should be:
+ * - fsname: general rule
+ * - fsname-tgtname: target-specific rule
+ */
+ if (strchr(svname, '-')) {
+ struct mgs_tgt_srpc_conf *tgtconf;
+ int found = 0;
+
+ for (tgtconf = fsdb->fsdb_srpc_tgt; tgtconf != NULL;
+ tgtconf = tgtconf->mtsc_next) {
+ if (!strcmp(tgtconf->mtsc_tgt, svname)) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ int name_len;
+
+ OBD_ALLOC_PTR(tgtconf);
+ if (tgtconf == NULL)
+ RETURN(-ENOMEM);
+
+ name_len = strlen(svname);
+
+ OBD_ALLOC(tgtconf->mtsc_tgt, name_len + 1);
+ if (tgtconf->mtsc_tgt == NULL) {
+ OBD_FREE_PTR(tgtconf);
+ RETURN(-ENOMEM);
+ }
+ memcpy(tgtconf->mtsc_tgt, svname, name_len);
+
+ tgtconf->mtsc_next = fsdb->fsdb_srpc_tgt;
+ fsdb->fsdb_srpc_tgt = tgtconf;
+ }
+
+ rset = &tgtconf->mtsc_rset;
} else if (strcmp(svname, MGSSELF_NAME) == 0) {
/* put _mgs related srpc rule directly in mgs ruleset */
rset = &fsdb->fsdb_mgs->mgs_lut.lut_sptlrpc_rset;
- } else {
- rset = &fsdb->fsdb_srpc_gen;
- }
+ } else {
+ rset = &fsdb->fsdb_srpc_gen;
+ }
- rc = sptlrpc_rule_set_merge(rset, &rule);
+ rc = sptlrpc_rule_set_merge(rset, &rule);
- RETURN(rc);
+ RETURN(rc);
}
static int mgs_srpc_set_param(const struct lu_env *env,
struct mgs_device *mgs,
- struct fs_db *fsdb,
- struct mgs_target_info *mti,
- char *param)
+ struct fs_db *fsdb,
+ struct mgs_target_info *mti,
+ char *param)
{
- char *copy;
- int rc, copy_size;
- ENTRY;
+ char *copy;
+ int rc, copy_size;
+ ENTRY;
#ifndef HAVE_GSS
- RETURN(-EINVAL);
+ RETURN(-EINVAL);
#endif
- /* keep a copy of original param, which could be destroied
- * during parsing */
- copy_size = strlen(param) + 1;
- OBD_ALLOC(copy, copy_size);
- if (copy == NULL)
- return -ENOMEM;
- memcpy(copy, param, copy_size);
-
- rc = mgs_srpc_set_param_mem(fsdb, mti->mti_svname, param);
- if (rc)
- goto out_free;
-
- /* previous steps guaranteed the syntax is correct */
+ /* keep a copy of original param, which could be destroied
+ * during parsing
+ */
+ copy_size = strlen(param) + 1;
+ OBD_ALLOC(copy, copy_size);
+ if (copy == NULL)
+ return -ENOMEM;
+ memcpy(copy, param, copy_size);
+
+ rc = mgs_srpc_set_param_mem(fsdb, mti->mti_svname, param);
+ if (rc)
+ goto out_free;
+
+ /* previous steps guaranteed the syntax is correct */
rc = mgs_srpc_set_param_disk(env, mgs, fsdb, mti, copy);
- if (rc)
- goto out_free;
+ if (rc)
+ goto out_free;
if (test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags)) {
- /*
- * for mgs rules, make them effective immediately.
- */
- LASSERT(fsdb->fsdb_srpc_tgt == NULL);
+ /*
+ * for mgs rules, make them effective immediately.
+ */
+ LASSERT(fsdb->fsdb_srpc_tgt == NULL);
sptlrpc_target_update_exp_flavor(mgs->mgs_obd,
&fsdb->fsdb_srpc_gen);
- }
+ }
out_free:
- OBD_FREE(copy, copy_size);
- RETURN(rc);
+ OBD_FREE(copy, copy_size);
+ RETURN(rc);
}
struct mgs_srpc_read_data {
- struct fs_db *msrd_fsdb;
- int msrd_skip;
+ struct fs_db *msrd_fsdb;
+ int msrd_skip;
};
static int mgs_srpc_read_handler(const struct lu_env *env,
struct llog_rec_hdr *rec, void *data)
{
struct mgs_srpc_read_data *msrd = data;
- struct cfg_marker *marker;
- struct lustre_cfg *lcfg = REC_DATA(rec);
- char *svname, *param;
- int cfg_len, rc;
- ENTRY;
+ struct cfg_marker *marker;
+ struct lustre_cfg *lcfg = REC_DATA(rec);
+ char *svname, *param;
+ int cfg_len, rc;
- if (rec->lrh_type != OBD_CFG_REC) {
- CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
- RETURN(-EINVAL);
- }
+ ENTRY;
+ if (rec->lrh_type != OBD_CFG_REC) {
+ CERROR("unhandled lrh_type: %#x\n", rec->lrh_type);
+ RETURN(-EINVAL);
+ }
cfg_len = REC_DATA_LEN(rec);
- rc = lustre_cfg_sanity_check(lcfg, cfg_len);
- if (rc) {
- CERROR("Insane cfg\n");
- RETURN(rc);
- }
-
- if (lcfg->lcfg_command == LCFG_MARKER) {
- marker = lustre_cfg_buf(lcfg, 1);
-
- if (marker->cm_flags & CM_START &&
- marker->cm_flags & CM_SKIP)
- msrd->msrd_skip = 1;
- if (marker->cm_flags & CM_END)
- msrd->msrd_skip = 0;
-
- RETURN(0);
- }
-
- if (msrd->msrd_skip)
- RETURN(0);
-
- if (lcfg->lcfg_command != LCFG_SPTLRPC_CONF) {
- CERROR("invalid command (%x)\n", lcfg->lcfg_command);
- RETURN(0);
- }
-
- svname = lustre_cfg_string(lcfg, 0);
- if (svname == NULL) {
- CERROR("svname is empty\n");
- RETURN(0);
- }
-
- param = lustre_cfg_string(lcfg, 1);
- if (param == NULL) {
- CERROR("param is empty\n");
- RETURN(0);
- }
-
- rc = mgs_srpc_set_param_mem(msrd->msrd_fsdb, svname, param);
- if (rc)
- CERROR("read sptlrpc record error (%d): %s\n", rc, param);
-
- RETURN(0);
+ rc = lustre_cfg_sanity_check(lcfg, cfg_len);
+ if (rc) {
+ CERROR("Insane cfg\n");
+ RETURN(rc);
+ }
+
+ if (lcfg->lcfg_command == LCFG_MARKER) {
+ marker = lustre_cfg_buf(lcfg, 1);
+
+ if (marker->cm_flags & CM_START &&
+ marker->cm_flags & CM_SKIP)
+ msrd->msrd_skip = 1;
+ if (marker->cm_flags & CM_END)
+ msrd->msrd_skip = 0;
+
+ RETURN(0);
+ }
+
+ if (msrd->msrd_skip)
+ RETURN(0);
+
+ if (lcfg->lcfg_command != LCFG_SPTLRPC_CONF) {
+ CERROR("invalid command (%x)\n", lcfg->lcfg_command);
+ RETURN(0);
+ }
+
+ svname = lustre_cfg_string(lcfg, 0);
+ if (svname == NULL) {
+ CERROR("svname is empty\n");
+ RETURN(0);
+ }
+
+ param = lustre_cfg_string(lcfg, 1);
+ if (param == NULL) {
+ CERROR("param is empty\n");
+ RETURN(0);
+ }
+
+ rc = mgs_srpc_set_param_mem(msrd->msrd_fsdb, svname, param);
+ if (rc)
+ CERROR("read sptlrpc record error (%d): %s\n", rc, param);
+
+ RETURN(0);
}
int mgs_get_fsdb_srpc_from_llog(const struct lu_env *env,
struct mgs_device *mgs,
- struct fs_db *fsdb)
+ struct fs_db *fsdb)
{
- struct llog_handle *llh = NULL;
- struct llog_ctxt *ctxt;
- char *logname;
- struct mgs_srpc_read_data msrd;
- int rc;
- ENTRY;
-
- /* construct log name */
- rc = name_create(&logname, fsdb->fsdb_name, "-sptlrpc");
- if (rc)
- RETURN(rc);
+ struct llog_handle *llh = NULL;
+ struct llog_ctxt *ctxt;
+ char *logname;
+ struct mgs_srpc_read_data msrd;
+ int rc;
+
+ ENTRY;
+ /* construct log name */
+ rc = name_create(&logname, fsdb->fsdb_name, "-sptlrpc");
+ if (rc)
+ RETURN(rc);
ctxt = llog_get_context(mgs->mgs_obd, LLOG_CONFIG_ORIG_CTXT);
- LASSERT(ctxt != NULL);
+ LASSERT(ctxt != NULL);
if (mgs_log_is_empty(env, mgs, logname))
- GOTO(out, rc = 0);
+ GOTO(out, rc = 0);
rc = llog_open(env, ctxt, &llh, NULL, logname,
LLOG_OPEN_EXISTS);
}
rc = llog_init_handle(env, llh, LLOG_F_IS_PLAIN, NULL);
- if (rc)
- GOTO(out_close, rc);
+ if (rc)
+ GOTO(out_close, rc);
- if (llog_get_size(llh) <= 1)
- GOTO(out_close, rc = 0);
+ if (llog_get_size(llh) <= 1)
+ GOTO(out_close, rc = 0);
- msrd.msrd_fsdb = fsdb;
- msrd.msrd_skip = 0;
+ msrd.msrd_fsdb = fsdb;
+ msrd.msrd_skip = 0;
rc = llog_process(env, llh, mgs_srpc_read_handler, (void *)&msrd,
NULL);
out_close:
llog_close(env, llh);
out:
- llog_ctxt_put(ctxt);
- name_destroy(&logname);
+ llog_ctxt_put(ctxt);
+ name_destroy(&logname);
- if (rc)
- CERROR("failed to read sptlrpc config database: %d\n", rc);
- RETURN(rc);
+ if (rc)
+ CERROR("failed to read sptlrpc config database: %d\n", rc);
+ RETURN(rc);
}
static int mgs_write_log_param2(const struct lu_env *env,
*/
static int mgs_write_log_param(const struct lu_env *env,
struct mgs_device *mgs, struct fs_db *fsdb,
- struct mgs_target_info *mti, char *ptr)
+ struct mgs_target_info *mti, char *ptr)
{
struct mgs_thread_info *mgi = mgs_env_info(env);
- char *logname;
- char *tmp;
+ char *logname;
+ char *tmp;
int rc = 0;
- ENTRY;
+ ENTRY;
- /* For various parameter settings, we have to figure out which logs
- care about them (e.g. both mdt and client for lov settings) */
- CDEBUG(D_MGS, "next param '%s'\n", ptr);
+ /* For various parameter settings, we have to figure out which logs
+ * care about them (e.g. both mdt and client for lov settings)
+ */
+ CDEBUG(D_MGS, "next param '%s'\n", ptr);
- /* The params are stored in MOUNT_DATA_FILE and modified via
- tunefs.lustre, or set using lctl conf_param */
+ /* The params are stored in MOUNT_DATA_FILE and modified via
+ * tunefs.lustre, or set using lctl conf_param
+ */
- /* Processed in lustre_start_mgc */
- if (class_match_param(ptr, PARAM_MGSNODE, NULL) == 0)
- GOTO(end, rc);
+ /* Processed in lustre_start_mgc */
+ if (class_match_param(ptr, PARAM_MGSNODE, NULL) == 0)
+ GOTO(end, rc);
/* Processed in ost/mdt */
if (class_match_param(ptr, PARAM_NETWORK, NULL) == 0)
GOTO(end, rc);
}
- if (class_match_param(ptr, PARAM_SRPC, NULL) == 0) {
+ if (class_match_param(ptr, PARAM_SRPC, NULL) == 0) {
rc = mgs_srpc_set_param(env, mgs, fsdb, mti, ptr);
- GOTO(end, rc);
- }
-
- if (class_match_param(ptr, PARAM_FAILNODE, NULL) == 0) {
- /* Add a failover nidlist */
- rc = 0;
- /* We already processed failovers params for new
- targets in mgs_write_log_target */
- if (mti->mti_flags & LDD_F_PARAM) {
- CDEBUG(D_MGS, "Adding failnode\n");
+ GOTO(end, rc);
+ }
+
+ if (class_match_param(ptr, PARAM_FAILNODE, NULL) == 0) {
+ /* Add a failover nidlist */
+ rc = 0;
+ /* We already processed failovers params for new
+ * targets in mgs_write_log_target
+ */
+ if (mti->mti_flags & LDD_F_PARAM) {
+ CDEBUG(D_MGS, "Adding failnode\n");
rc = mgs_write_log_add_failnid(env, mgs, fsdb, mti);
- }
- GOTO(end, rc);
- }
+ }
+ GOTO(end, rc);
+ }
- if (class_match_param(ptr, PARAM_SYS, &tmp) == 0) {
+ if (class_match_param(ptr, PARAM_SYS, &tmp) == 0) {
rc = mgs_write_log_sys(env, mgs, fsdb, mti, ptr, tmp);
- GOTO(end, rc);
- }
+ GOTO(end, rc);
+ }
if (class_match_param(ptr, PARAM_QUOTA, &tmp) == 0) {
rc = mgs_write_log_quota(env, mgs, fsdb, mti, ptr, tmp);
/* active=0 means off, anything else means on */
int flag = (*tmp == '0') ? CM_EXCLUDE : 0;
bool deactive_osc = memcmp(ptr, PARAM_OSC PARAM_ACTIVE,
- strlen(PARAM_OSC PARAM_ACTIVE)) == 0;
+ strlen(PARAM_OSC PARAM_ACTIVE)) == 0;
int i;
if (!deactive_osc) {
GOTO(end, rc);
}
/* Fall through to osc/mdc proc for deactivating live
- OSC/OSP on running MDT / clients. */
+ * OSC/OSP on running MDT / clients.
+ */
}
- /* Below here, let obd's XXX_process_config methods handle it */
+ /* Below here, let obd's XXX_process_config methods handle it */
- /* All lov. in proc */
- if (class_match_param(ptr, PARAM_LOV, NULL) == 0) {
- char *mdtlovname;
+ /* All lov. in proc */
+ if (class_match_param(ptr, PARAM_LOV, NULL) == 0) {
+ char *mdtlovname;
- CDEBUG(D_MGS, "lov param %s\n", ptr);
- if (!(mti->mti_flags & LDD_F_SV_TYPE_MDT)) {
- LCONSOLE_ERROR_MSG(0x147, "LOV params must be "
- "set on the MDT, not %s. "
- "Ignoring.\n",
- mti->mti_svname);
- GOTO(end, rc = 0);
- }
+ CDEBUG(D_MGS, "lov param %s\n", ptr);
+ if (!(mti->mti_flags & LDD_F_SV_TYPE_MDT)) {
+ LCONSOLE_ERROR_MSG(0x147,
+ "LOV params must be set on the MDT, not %s. Ignoring.\n",
+ mti->mti_svname);
+ GOTO(end, rc = 0);
+ }
- /* Modify mdtlov */
+ /* Modify mdtlov */
if (mgs_log_is_empty(env, mgs, mti->mti_svname))
- GOTO(end, rc = -ENODEV);
+ GOTO(end, rc = -ENODEV);
rc = name_create_mdt_and_lov(&logname, &mdtlovname, fsdb,
mti->mti_stripe_index);
GOTO(end, rc);
rc = mgs_wlp_lcfg(env, mgs, fsdb, mti, mti->mti_svname,
&mgi->mgi_bufs, mdtlovname, ptr);
- name_destroy(&logname);
- name_destroy(&mdtlovname);
- if (rc)
- GOTO(end, rc);
+ name_destroy(&logname);
+ name_destroy(&mdtlovname);
+ if (rc)
+ GOTO(end, rc);
- /* Modify clilov */
+ /* Modify clilov */
rc = name_create(&logname, mti->mti_fsname, "-client");
if (rc)
GOTO(end, rc);
rc = mgs_wlp_lcfg(env, mgs, fsdb, mti, logname, &mgi->mgi_bufs,
- fsdb->fsdb_clilov, ptr);
- name_destroy(&logname);
- GOTO(end, rc);
- }
+ fsdb->fsdb_clilov, ptr);
+ name_destroy(&logname);
+ GOTO(end, rc);
+ }
- /* All osc., mdc., llite. params in proc */
- if ((class_match_param(ptr, PARAM_OSC, NULL) == 0) ||
- (class_match_param(ptr, PARAM_MDC, NULL) == 0) ||
- (class_match_param(ptr, PARAM_LLITE, NULL) == 0)) {
- char *cname;
+ /* All osc., mdc., llite. params in proc */
+ if ((class_match_param(ptr, PARAM_OSC, NULL) == 0) ||
+ (class_match_param(ptr, PARAM_MDC, NULL) == 0) ||
+ (class_match_param(ptr, PARAM_LLITE, NULL) == 0)) {
+ char *cname;
if (test_bit(FSDB_OLDLOG14, &fsdb->fsdb_flags)) {
LCONSOLE_ERROR_MSG(0x148, "Upgraded client logs for %s"
if (memcmp(ptr, PARAM_LLITE, strlen(PARAM_LLITE)) == 0) {
rc = name_create(&cname, mti->mti_fsname, "-client");
/* Add the client type to match the obdname in
- class_config_llog_handler */
+ * class_config_llog_handler
+ */
} else if (mti->mti_flags & LDD_F_SV_TYPE_MDT) {
rc = name_create(&cname, mti->mti_svname, "-mdc");
} else if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
GOTO(end, rc);
}
rc = mgs_wlp_lcfg(env, mgs, fsdb, mti, logname, &mgi->mgi_bufs,
- cname, ptr);
+ cname, ptr);
- /* osc params affect the MDT as well */
- if (!rc && (mti->mti_flags & LDD_F_SV_TYPE_OST)) {
- int i;
+ /* osc params affect the MDT as well */
+ if (!rc && (mti->mti_flags & LDD_F_SV_TYPE_OST)) {
+ int i;
- for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
+ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
if (!test_bit(i, fsdb->fsdb_mdt_index_map))
- continue;
- name_destroy(&cname);
+ continue;
+ name_destroy(&cname);
rc = name_create_mdt_osc(&cname, mti->mti_svname,
fsdb, i);
- name_destroy(&logname);
+ name_destroy(&logname);
if (rc)
break;
rc = name_create_mdt(&logname,
/* All mdt. params in proc */
if (class_match_param(ptr, PARAM_MDT, &tmp) == 0) {
- int i;
- __u32 idx;
-
- 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++) {
+ int i;
+ __u32 idx;
+
+ 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 (!test_bit(i,
- fsdb->fsdb_mdt_index_map))
- continue;
+ fsdb->fsdb_mdt_index_map))
+ continue;
rc = name_create_mdt(&logname,
- mti->mti_fsname, i);
+ mti->mti_fsname, i);
if (rc)
goto active_err;
rc = mgs_wlp_lcfg(env, mgs, fsdb, mti,
if (class_match_param(ptr, PARAM_AUTODEGRADE, NULL) == 0)
GOTO(end, rc);
- LCONSOLE_WARN("Ignoring unrecognized param '%s'\n", ptr);
+ LCONSOLE_WARN("Ignoring unrecognized param '%s'\n", ptr);
end:
- if (rc)
- CERROR("err %d on param '%s'\n", rc, ptr);
+ if (rc)
+ CERROR("err %d on param '%s'\n", rc, ptr);
RETURN(rc);
}
mti->mti_flags |= LDD_F_PARAM;
}
- /* allocate temporary buffer, where class_get_next_param will
- make copy of a current parameter */
- OBD_ALLOC(buf, strlen(mti->mti_params) + 1);
- if (buf == NULL)
- GOTO(out_up, rc = -ENOMEM);
- params = mti->mti_params;
- while (params != NULL) {
- rc = class_get_next_param(¶ms, buf);
- if (rc) {
- if (rc == 1)
- /* there is no next parameter, that is
- not an error */
- rc = 0;
- break;
- }
- CDEBUG(D_MGS, "remaining string: '%s', param: '%s'\n",
- params, buf);
+ /* allocate temporary buffer, where class_get_next_param will
+ * make copy of a current parameter
+ */
+ OBD_ALLOC(buf, strlen(mti->mti_params) + 1);
+ if (buf == NULL)
+ GOTO(out_up, rc = -ENOMEM);
+ params = mti->mti_params;
+ while (params != NULL) {
+ rc = class_get_next_param(¶ms, buf);
+ if (rc) {
+ if (rc == 1)
+ /* there is no next parameter, that is
+ * not an error
+ */
+ rc = 0;
+ break;
+ }
+ CDEBUG(D_MGS, "remaining string: '%s', param: '%s'\n",
+ params, buf);
rc = mgs_write_log_param(env, mgs, fsdb, mti, buf);
- if (rc)
- break;
- }
+ if (rc)
+ break;
+ }
- OBD_FREE(buf, strlen(mti->mti_params) + 1);
+ OBD_FREE(buf, strlen(mti->mti_params) + 1);
out_up:
mutex_unlock(&fsdb->fsdb_mutex);
- RETURN(rc);
+ RETURN(rc);
}
int mgs_erase_log(const struct lu_env *env, struct mgs_device *mgs, char *name)
static int mgs_write_log_pool(const struct lu_env *env,
struct mgs_device *mgs, char *logname,
struct fs_db *fsdb, char *tgtname,
- enum lcfg_command_type cmd,
+ enum lcfg_command_type cmd,
char *fsname, char *poolname,
- char *ostname, char *comment)
+ char *ostname, char *comment)
{
- struct llog_handle *llh = NULL;
- int rc;
+ struct llog_handle *llh = NULL;
+ int rc;
rc = record_start_log(env, mgs, &llh, logname);
if (rc)
rc = record_marker(env, llh, fsdb, CM_END, tgtname, comment);
out:
record_end_log(env, &llh);
- return rc;
+ return rc;
}
int mgs_nodemap_cmd(const struct lu_env *env, struct mgs_device *mgs,
enum lcfg_command_type cmd, char *fsname,
char *poolname, char *ostname)
{
- struct fs_db *fsdb;
- char *lovname;
- char *logname;
- char *label = NULL, *canceled_label = NULL;
- int label_sz;
- struct mgs_target_info *mti = NULL;
+ struct fs_db *fsdb;
+ char *lovname;
+ char *logname;
+ char *label = NULL, *canceled_label = NULL;
+ int label_sz;
+ struct mgs_target_info *mti = NULL;
bool checked = false;
bool locked = false;
bool free = false;
CERROR("%s is not defined\n", fsname);
free = true;
GOTO(out_fsdb, rc = -EINVAL);
- }
+ }
- label_sz = 10 + strlen(fsname) + strlen(poolname);
+ label_sz = 10 + strlen(fsname) + strlen(poolname);
- /* check if ostname match fsname */
- if (ostname != NULL) {
- char *ptr;
+ /* check if ostname match fsname */
+ if (ostname != NULL) {
+ char *ptr;
- ptr = strrchr(ostname, '-');
- if ((ptr == NULL) ||
- (strncmp(fsname, ostname, ptr-ostname) != 0))
- RETURN(-EINVAL);
- label_sz += strlen(ostname);
- }
+ ptr = strrchr(ostname, '-');
+ if ((ptr == NULL) ||
+ (strncmp(fsname, ostname, ptr-ostname) != 0))
+ RETURN(-EINVAL);
+ label_sz += strlen(ostname);
+ }
- OBD_ALLOC(label, label_sz);
+ OBD_ALLOC(label, label_sz);
if (!label)
GOTO(out_fsdb, rc = -ENOMEM);
- switch(cmd) {
+ switch (cmd) {
case LCFG_POOL_NEW:
- sprintf(label,
- "new %s.%s", fsname, poolname);
- break;
+ sprintf(label, "new %s.%s", fsname, poolname);
+ break;
case LCFG_POOL_ADD:
- sprintf(label,
- "add %s.%s.%s", fsname, poolname, ostname);
- break;
+ sprintf(label, "add %s.%s.%s", fsname, poolname, ostname);
+ break;
case LCFG_POOL_REM:
- OBD_ALLOC(canceled_label, label_sz);
- if (canceled_label == NULL)
+ OBD_ALLOC(canceled_label, label_sz);
+ if (canceled_label == NULL)
GOTO(out_label, rc = -ENOMEM);
- sprintf(label,
- "rem %s.%s.%s", fsname, poolname, ostname);
- sprintf(canceled_label,
- "add %s.%s.%s", fsname, poolname, ostname);
- break;
+ sprintf(label, "rem %s.%s.%s", fsname, poolname, ostname);
+ sprintf(canceled_label, "add %s.%s.%s",
+ fsname, poolname, ostname);
+ break;
case LCFG_POOL_DEL:
- OBD_ALLOC(canceled_label, label_sz);
- if (canceled_label == NULL)
+ OBD_ALLOC(canceled_label, label_sz);
+ if (canceled_label == NULL)
GOTO(out_label, rc = -ENOMEM);
- sprintf(label,
- "del %s.%s", fsname, poolname);
- sprintf(canceled_label,
- "new %s.%s", fsname, poolname);
- break;
+ sprintf(label, "del %s.%s", fsname, poolname);
+ sprintf(canceled_label, "new %s.%s", fsname, poolname);
+ break;
default:
- break;
- }
+ break;
+ }
OBD_ALLOC_PTR(mti);
if (mti == NULL)
if (!checked && (canceled_label == NULL)) {
rc = mgs_check_marker(env, mgs, fsdb, mti,
- logname, lovname, label);
+ logname, lovname, label);
if (rc) {
name_destroy(&logname);
name_destroy(&lovname);
GOTO(out_mti,
- rc = (rc == LLOG_PROC_BREAK ?
- -EEXIST : rc));
+ rc = (rc == LLOG_PROC_BREAK ?
+ -EEXIST : rc));
}
checked = true;
}
if (!checked && (canceled_label == NULL)) {
rc = mgs_check_marker(env, mgs, fsdb, mti, logname,
- fsdb->fsdb_clilov, label);
+ fsdb->fsdb_clilov, label);
if (rc) {
name_destroy(&logname);
GOTO(out_mti, rc = (rc == LLOG_PROC_BREAK ?
- -EEXIST : rc));
+ -EEXIST : rc));
}
}
if (canceled_label != NULL) {