Whamcloud - gitweb
Branch: b_new_cmd
authorwangdi <wangdi>
Thu, 7 Sep 2006 09:51:47 +0000 (09:51 +0000)
committerwangdi <wangdi>
Thu, 7 Sep 2006 09:51:47 +0000 (09:51 +0000)
fix set mds_conn bugs to make o_id cache work for each group in ost

lustre/lov/lov_obd.c
lustre/osc/osc_create.c
lustre/osc/osc_request.c

index f4c9ceb..50c7a85 100644 (file)
@@ -2449,8 +2449,23 @@ static int lov_set_info_async(struct obd_export *exp, obd_count keylen,
                 }
                 GOTO(out, rc);
         }
+        if (KEY_IS(KEY_MDS_CONN)) {
+                for (i = 0; i < lov->desc.ld_tgt_count; i++) {
+                        if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_exp)
+                                continue;
+                        
+                        if (!val && !lov->lov_tgts[i]->ltd_active)
+                                continue;
 
-        if (KEY_IS(KEY_MDS_CONN) || KEY_IS("unlinked")) {
+                        err = obd_set_info_async(lov->lov_tgts[i]->ltd_exp,
+                                                 keylen, key, vallen, val, set);
+                        if (!rc)
+                                rc = err;
+                }
+                GOTO(out, rc);
+        }
+        
+        if (KEY_IS("unlinked")) {
                 if (vallen != 0 && KEY_IS("unlinked"))
                         GOTO(out, rc = -EINVAL);
         } else {
index 3f6c15b..6d7fff7 100644 (file)
@@ -151,7 +151,9 @@ static int oscc_internal_create(struct osc_creator *oscc)
 
         spin_lock(&oscc->oscc_lock);
         body->oa.o_id = oscc->oscc_last_id + oscc->oscc_grow_count;
-        body->oa.o_valid |= OBD_MD_FLID;
+        body->oa.o_gr = oscc->oscc_oa.o_gr;
+        LASSERT(body->oa.o_gr > 0);
+        body->oa.o_valid |= OBD_MD_FLID | OBD_MD_FLGROUP;
         spin_unlock(&oscc->oscc_lock);
         CDEBUG(D_HA, "preallocating through id "LPU64" (last used "LPU64")\n",
                body->oa.o_id, oscc->oscc_next_id);
@@ -242,13 +244,7 @@ int osc_create(struct obd_export *exp, struct obdo *oa,
         
         LASSERT(oa->o_gr > 0);
         LASSERT(oa->o_valid & OBD_MD_FLGROUP);
-        /* 
-         * FIXME: Now we can only create the object without cache,
-         * since we have only 1 oscc, only support one cache, will
-         * fix it soon Wangdi
-         */
-        if ((oa->o_valid & OBD_MD_FLGROUP) && (oa->o_gr != 0))
-                RETURN(osc_real_create(exp, oa, ea, oti));
+
         if ((oa->o_valid & OBD_MD_FLFLAGS) &&
             oa->o_flags == OBD_FL_RECREATE_OBJS) {
                 RETURN(osc_real_create(exp, oa, ea, oti));
index 39fc297..495af7b 100644 (file)
@@ -3477,8 +3477,13 @@ static int osc_set_info_async(struct obd_export *exp, obd_count keylen,
         if (req == NULL)
                 RETURN(-ENOMEM);
 
-        if (KEY_IS("mds_conn"))
+        if (KEY_IS("mds_conn")) {
+                struct osc_creator *oscc = &obd->u.cli.cl_oscc;
+
+                oscc->oscc_oa.o_gr = (*(__u32 *)val);
+                LASSERT(oscc->oscc_oa.o_gr > 0);
                 req->rq_interpret_reply = osc_setinfo_mds_conn_interpret;
+        }
 
         ptlrpc_req_set_repsize(req, 1, NULL);
         ptlrpc_set_add_req(set, req);