req->rq_delay_limit = MGC_TARGET_REG_LIMIT_MAX;
rc = ptlrpc_queue_wait(req);
- if (!rc) {
- rep_mti = req_capsule_server_get(&req->rq_pill,
- &RMF_MGS_TARGET_INFO);
- memcpy(mti, rep_mti, sizeof(*rep_mti));
- CDEBUG(D_MGC, "register %s got index = %d\n",
- mti->mti_svname, mti->mti_stripe_index);
+ if (ptlrpc_client_replied(req)) {
+ rep_mti = req_capsule_server_get(&req->rq_pill,
+ &RMF_MGS_TARGET_INFO);
+ if (rep_mti)
+ memcpy(mti, rep_mti, sizeof(*rep_mti));
+ }
+ if (!rc) {
+ CDEBUG(D_MGC, "register %s got index = %d\n",
+ mti->mti_svname, mti->mti_stripe_index);
}
ptlrpc_req_finished(req);
bool invalid_flag = false;
if (flags & (LDD_F_SV_TYPE_MDT | LDD_F_SV_TYPE_OST)) {
+ char reg_flag = '-';
+
+ if (flags & LDD_F_WRITECONF)
+ reg_flag = '=';
+ else if (flags & LDD_F_VIRGIN)
+ reg_flag = ':';
+
if (!(flags & LDD_F_SV_ALL))
snprintf(name_buf, name_buf_size, "%.8s%c%s%04x", fs,
- (flags & LDD_F_VIRGIN) ? ':' :
- ((flags & LDD_F_WRITECONF) ? '=' : '-'),
+ reg_flag,
(flags & LDD_F_SV_TYPE_MDT) ? "MDT" : "OST",
index);
} else if (flags & LDD_F_SV_TYPE_MGS) {
{
struct obd_device *mgc = lsi->lsi_mgc;
struct mgs_target_info *mti = NULL;
- bool writeconf;
+ bool must_succeed;
int rc;
int tried = 0;
ENTRY;
libcfs_nid2str(mti->mti_nids[0]), mti->mti_stripe_index,
mti->mti_flags);
- /* if write_conf is true, the registration must succeed */
- writeconf = !!(lsi->lsi_flags & (LDD_F_NEED_INDEX | LDD_F_UPDATE));
+ /* we cannot ignore registration failure if MGS logs must be updated. */
+ must_succeed = !!(lsi->lsi_flags &
+ (LDD_F_NEED_INDEX | LDD_F_UPDATE | LDD_F_WRITECONF |
+ LDD_F_VIRGIN));
mti->mti_flags |= LDD_F_OPC_REG;
again:
"%s: the MGS refuses to allow this server "
"to start: rc = %d. Please see messages on "
"the MGS.\n", lsi->lsi_svname, rc);
- } else if (writeconf) {
+ } else if (must_succeed) {
if ((rc == -ESHUTDOWN || rc == -EIO) && ++tried < 5) {
/* The connection with MGS is not established.
* Try again after 2 seconds. Interruptable. */
}
run_test 128 "Force using remote logs with --nolocallogs"
+test_129()
+{
+ stopall
+ start_mds || error "MDS start failed"
+ format_ost 1
+ start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &&
+ error "start ost1 should fail" || true
+ start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &&
+ error "second start ost1 should fail" || true
+ do_facet ost1 "$TUNEFS --writeconf $(ostdevname 1)"
+ start ost1 $(ostdevname 1) $OST_MOUNT_OPTS ||
+ error "start ost1 failed"
+ stop ost1
+ stop_mds
+}
+run_test 129 "attempt to connect an OST with the same index should fail"
+
test_130()
{
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
bool invalid_flag = false;
if (flags & (LDD_F_SV_TYPE_MDT | LDD_F_SV_TYPE_OST)) {
+ char reg_flag = '-';
+
+ if (flags & LDD_F_WRITECONF)
+ reg_flag = '=';
+ else if (flags & LDD_F_VIRGIN)
+ reg_flag = ':';
+ else if (flags & LDD_F_NO_LOCAL_LOGS)
+ reg_flag = '+';
+
+
if (!(flags & LDD_F_SV_ALL))
snprintf(name_buf, name_buf_size, "%.8s%c%s%04x", fs,
- (flags & LDD_F_VIRGIN) ? ':' :
- ((flags & LDD_F_WRITECONF) ? '=' :
- ((flags & LDD_F_NO_LOCAL_LOGS) ? '+' : '-')),
- (flags & LDD_F_SV_TYPE_MDT) ? "MDT" : "OST",
+ reg_flag,
+ (flags & LDD_F_SV_TYPE_MDT) ? "MDT" : "OST",
index);
} else if (flags & LDD_F_SV_TYPE_MGS) {
snprintf(name_buf, name_buf_size, "MGS");