struct obd_device *obd = ctxt->loc_obd;
struct lov_obd *lov = &obd->u.lov;
struct lov_oinfo *loi;
- int i, rc = 0;
+ int i, rc = 0, rc1;
ENTRY;
LASSERTF(logcookies && numcookies >= lsm->lsm_stripe_count,
"logcookies %p, numcookies %d lsm->lsm_stripe_count %d \n",
logcookies, numcookies, lsm->lsm_stripe_count);
- for (i = 0,loi = lsm->lsm_oinfo; i < lsm->lsm_stripe_count; i++,loi++) {
+ for (i = 0, loi = lsm->lsm_oinfo; i < lsm->lsm_stripe_count; i++,loi++) {
struct obd_device *child =
lov->lov_tgts[loi->loi_ost_idx]->ltd_exp->exp_obd;
struct llog_ctxt *cctxt = llog_get_context(child, ctxt->loc_idx);
break;
}
LASSERT(lsm->lsm_object_gr == loi->loi_gr);
- rc += llog_add(cctxt, rec, NULL, logcookies + rc,
- numcookies - rc);
+ rc1 = llog_add(cctxt, rec, NULL, logcookies + rc,
+ numcookies - rc);
+ if (rc1 < 0)
+ RETURN(rc1);
+ rc += rc1;
}
RETURN(rc);
{
struct obd_device *obd = ctxt->loc_obd;
struct lov_obd *lov = &obd->u.lov;
- int i, rc = 0;
+ int i, rc = 0, err = 0;
ENTRY;
- /* We might have added an osc and not told the mds yet */
- if (count != lov->desc.ld_tgt_count)
- CERROR("Origin connect mds cnt %d != lov cnt %d\n", count,
- lov->desc.ld_tgt_count);
-
lov_getref(obd);
for (i = 0; i < count; i++) {
struct obd_device *child;
if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_active)
continue;
- child = lov->lov_tgts[i]->ltd_exp->exp_obd;
- cctxt = llog_get_context(child, ctxt->loc_idx);
if (uuid && !obd_uuid_equals(uuid, &lov->lov_tgts[i]->ltd_uuid))
continue;
-
+ CDEBUG(D_CONFIG, "connect %d/%d\n", i, count);
+ child = lov->lov_tgts[i]->ltd_exp->exp_obd;
+ cctxt = llog_get_context(child, ctxt->loc_idx);
rc = llog_connect(cctxt, 1, logid, gen, uuid);
if (rc) {
CERROR("error osc_llog_connect tgt %d (%d)\n", i, rc);
- break;
+ if (!err)
+ err = rc;
}
}
lov_putref(obd);
- RETURN(rc);
+ RETURN(err);
}
/* the replicators commit callback */
lop_cancel: lov_llog_repl_cancel
};
-int lov_llog_init(struct obd_device *obd, struct obd_device *tgt,
- int count, struct llog_catid *logid)
+int lov_llog_init(struct obd_device *obd, struct obd_llogs *llogs,
+ struct obd_device *tgt, int count, struct llog_catid *logid,
+ struct obd_uuid *uuid)
{
struct lov_obd *lov = &obd->u.lov;
struct obd_device *child;
int i, rc = 0, err = 0;
ENTRY;
- rc = llog_setup(obd, LLOG_MDS_OST_ORIG_CTXT, tgt, 0, NULL,
+ rc = llog_setup(obd, llogs, LLOG_MDS_OST_ORIG_CTXT, tgt, 0, NULL,
&lov_mds_ost_orig_logops);
if (rc)
RETURN(rc);
- rc = llog_setup(obd, LLOG_SIZE_REPL_CTXT, tgt, 0, NULL,
+ rc = llog_setup(obd, llogs, LLOG_SIZE_REPL_CTXT, tgt, 0, NULL,
&lov_size_repl_logops);
if (rc)
RETURN(rc);
- CDEBUG(D_CONFIG, "llog init with %d/%d targets\n",
- count, lov->desc.ld_tgt_count);
- /* count may not match ld_tgt_count during dynamic ost add */
-
lov_getref(obd);
- for (i = 0; i < lov->desc.ld_tgt_count; i++) {
+ /* count may not match lov->desc.ld_tgt_count during dynamic ost add */
+ for (i = 0; i < count; i++) {
if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_active)
continue;
+ if (uuid && !obd_uuid_equals(uuid, &lov->lov_tgts[i]->ltd_uuid))
+ continue;
+ CDEBUG(D_CONFIG, "init %d/%d\n", i, count);
LASSERT(lov->lov_tgts[i]->ltd_exp);
child = lov->lov_tgts[i]->ltd_exp->exp_obd;
- if (lov->lov_tgts[i]->ltd_exp->exp_imp_reverse) {
- CERROR("NZR: idx %d import state %s\n", i,
- ptlrpc_import_state_name(lov->lov_tgts[i]->ltd_exp->exp_imp_reverse->imp_state));
- } else {
- CERROR("NZR: idx %d no import\n", i);
- }
- rc = obd_llog_init(child, tgt, 1, logid + i);
+ rc = obd_llog_init(child, llogs, tgt, 1, logid + i, uuid);
if (rc) {
CERROR("error osc_llog_init idx %d osc '%s' tgt '%s' "
"(rc=%d)\n", i, child->obd_name, tgt->obd_name,