Whamcloud - gitweb
- fix qos_maxage issue. It was uninitialized.
[fs/lustre-release.git] / lustre / lov / lov_log.c
index f7b41f7..3805655 100644 (file)
@@ -60,14 +60,14 @@ static int lov_llog_origin_add(struct llog_ctxt *ctxt,
         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);
@@ -89,9 +89,12 @@ static int lov_llog_origin_add(struct llog_ctxt *ctxt,
                 default:
                         break;
                 }
-
-                rc += llog_add(cctxt, rec, NULL, logcookies + rc,
-                                numcookies - rc);
+                LASSERT(lsm->lsm_object_gr == loi->loi_gr);
+                rc1 = llog_add(cctxt, rec, NULL, logcookies + rc,
+                               numcookies - rc);
+                if (rc1 < 0)
+                        RETURN(rc1);
+                rc += rc1;
         }
 
         RETURN(rc);
@@ -104,14 +107,9 @@ static int lov_llog_origin_connect(struct llog_ctxt *ctxt, int count,
 {
         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;
@@ -119,20 +117,21 @@ static int lov_llog_origin_connect(struct llog_ctxt *ctxt, int count,
                 
                 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 */
@@ -180,41 +179,36 @@ static struct llog_operations lov_size_repl_logops = {
         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,