Whamcloud - gitweb
fix some bug:
authorhuanghua <huanghua>
Sun, 9 Jul 2006 17:33:58 +0000 (17:33 +0000)
committerhuanghua <huanghua>
Sun, 9 Jul 2006 17:33:58 +0000 (17:33 +0000)
(1) duplicate memory in mdt_obd_disconnect & mdt_client_free;
(2) comment out some read & write code;
(3) transaction related. (still need more work)

lustre/mdt/mdt_fs.c
lustre/mdt/mdt_handler.c
lustre/mdt/mdt_open.c

index cf67877..7afdbf5 100644 (file)
@@ -90,11 +90,12 @@ int mdt_client_add(const struct lu_context *ctxt,
                 loff_t off = med->med_lr_off;
                 int rc = 0;
                 
+/*
                 rc = mdt->mdt_last->do_body_ops->dbo_write(ctxt, 
                                                            mdt->mdt_last,
                                                            mcd, sizeof(*mcd), 
                                                            &off);
-
+*/
                 if (rc)
                         return rc;
                 CDEBUG(D_INFO, "wrote client mcd at idx %u off %llu (len %u)\n",
@@ -116,10 +117,12 @@ int mdt_update_server_data(const struct lu_context *ctxt,
                 mdt->mdt_mount_count, mdt->mdt_last_transno);
       
         msd->msd_last_transno = cpu_to_le64(mdt->mdt_last_transno);
+/*
         rc = mdt->mdt_last->do_body_ops->dbo_write(ctxt, 
                                                    mdt->mdt_last,
                                                    msd,
                                                    sizeof(*msd), &off);
+*/
         RETURN(rc);
 
 }
@@ -157,7 +160,7 @@ int mdt_client_free(const struct lu_context *ctxt,
                 LBUG();
         }
 
-        memset(&mcd, 0, sizeof *mcd);
+        memset(mcd, 0, sizeof *mcd);
 /*
         rc = mdt->mdt_last->do_body_ops->dbo_write(ctxt, 
                                                    mdt->mdt_last,
@@ -218,10 +221,12 @@ static int mdt_init_server_data(const struct lu_context *ctxt,
                 msd->msd_feature_incompat = cpu_to_le32(OBD_INCOMPAT_MDT |
                                                         OBD_INCOMPAT_COMMON_LR);
         } else {
+/*
                 rc = mdt->mdt_last->do_body_ops->dbo_read(ctxt, 
                                                           mdt->mdt_last,
                                                           msd,
                                                           sizeof(*msd), &off);
+*/
                 if (rc) {
                         CERROR("error reading MDS %s: rc %d\n", LAST_RCVD, rc);
                         GOTO(out, rc);
@@ -302,10 +307,12 @@ static int mdt_init_server_data(const struct lu_context *ctxt,
 
                 off = le32_to_cpu(msd->msd_client_start) +
                         cl_idx * le16_to_cpu(msd->msd_client_size);
+/*
                 rc = mdt->mdt_last->do_body_ops->dbo_read(ctxt, 
                                                           mdt->mdt_last,
                                                           mcd,
                                                           sizeof(*mcd), &off);
+*/
                 if (rc) {
                         CERROR("error reading MDS %s idx %d, off %llu: rc %d\n",
                                LAST_RCVD, cl_idx, off, rc);
index edbc482..df29f6b 100644 (file)
@@ -907,6 +907,33 @@ static int mdt_unpack_req_pack_rep(struct mdt_thread_info *info, __u32 flags)
         RETURN(result);
 }
 
+/* FIXME: fake untill journal callback is OK.*/
+int mdt_update_last_transno(struct mdt_thread_info *info)
+{
+        __u64 last_transno;
+        __u64 last_committed;
+        struct mdt_device *mdt = info->mti_mdt;
+        struct ptlrpc_request * req = mdt_info_req(info);
+
+        LASSERT(mdt != NULL);
+        spin_lock(&mdt->mdt_transno_lock);
+        last_transno = ++ (mdt->mdt_last_transno);
+        last_committed = ++ (mdt->mdt_last_committed);
+        spin_unlock(&mdt->mdt_transno_lock);
+
+        CERROR("last_transno = %llu, last_committed = %llu\n", 
+                last_transno, last_committed);
+        req->rq_repmsg->transno = req->rq_transno = last_transno;
+        req->rq_repmsg->last_xid = req->rq_xid;
+        req->rq_repmsg->last_committed = last_committed;
+        req->rq_export->exp_obd->obd_last_committed = last_committed;
+/*
+        req->rq_repmsg->last_xid = le64_to_cpu(req_exp_last_xid(req));
+        target_committed_to_req(req);
+*/
+        return 0;
+}
+
 /*
  * Invoke handler for this request opc. Also do necessary preprocessing
  * (according to handler ->mh_flags), and post-processing (setting of
@@ -985,25 +1012,8 @@ static int mdt_req_handle(struct mdt_thread_info *info,
 
         /* If we're DISCONNECTing, the mdt_export_data is already freed */
         if (result == 0 && h->mh_opc != MDS_DISCONNECT) {
-                /* FIXME: fake untill journal callback & open handling is OK.*/
-                __u64 last_transno;
-                __u64 last_committed;
-                struct mdt_device *mdt = info->mti_mdt;
-
-                LASSERT(mdt != NULL);
-                spin_lock(&mdt->mdt_transno_lock);
-                last_transno = ++ (mdt->mdt_last_transno);
-                last_committed = ++ (mdt->mdt_last_committed);
-                spin_unlock(&mdt->mdt_transno_lock);
-
-                req->rq_repmsg->transno = req->rq_transno = last_transno;
-                req->rq_repmsg->last_xid = req->rq_xid;
-                req->rq_repmsg->last_committed = last_committed;
-                req->rq_export->exp_obd->obd_last_committed = last_committed;
-#if 0
-                req->rq_repmsg->last_xid = le64_to_cpu(req_exp_last_xid(req));
-                target_committed_to_req(req);
-#endif
+                /* FIXME: fake untill journal callback is OK.*/
+                mdt_update_last_transno(info);
         }
         req_capsule_fini(&info->mti_pill);
         RETURN(result);
@@ -1612,6 +1622,7 @@ static int mdt_intent_policy(struct ldlm_namespace *ns,
                                    ldlm_it2str(it->opc));
 
                         rc = mdt_intent_opc(it->opc, info, lockp, flags);
+                        mdt_update_last_transno(info);
                         if (rc == 0)
                                 rc = ELDLM_OK;
                 } else
@@ -2057,8 +2068,8 @@ static int mdt_init0(const struct lu_context *ctx, struct mdt_device *m,
 
         spin_lock_init(&m->mdt_transno_lock);
         /* FIXME: We need to load them from disk. But now fake it */
-        m->mdt_last_transno = 0;
-        m->mdt_last_committed = 0;
+        m->mdt_last_transno = 100;
+        m->mdt_last_committed = 99;
         m->mdt_max_mdsize = MAX_MD_SIZE;
         m->mdt_max_cookiesize = sizeof(struct llog_cookie);
 
@@ -2285,8 +2296,14 @@ static int mdt_obd_connect(struct lustre_handle *conn, struct obd_device *obd,
         struct mdt_device *mdt;
         struct mdt_export_data *med;
         struct mdt_client_data *mcd;
+        struct lu_context ctxt;
         ENTRY;
 
+        rc = lu_context_init(&ctxt);
+        if (rc)
+                RETURN(rc);
+        lu_context_enter(&ctxt);
+
         if (!conn || !obd || !cluuid)
                 RETURN(-EINVAL);
 
@@ -2306,6 +2323,7 @@ static int mdt_obd_connect(struct lustre_handle *conn, struct obd_device *obd,
                 if (mcd != NULL) {
                         memcpy(mcd->mcd_uuid, cluuid, sizeof mcd->mcd_uuid);
                         med->med_mcd = mcd;
+                        rc = mdt_client_add(&ctxt, mdt, med, -1);
                 } else
                         rc = -ENOMEM;
         }
@@ -2313,13 +2331,14 @@ static int mdt_obd_connect(struct lustre_handle *conn, struct obd_device *obd,
                 class_disconnect(exp);
         else
                 class_export_put(exp);
+        lu_context_exit(&ctxt);
+        lu_context_fini(&ctxt);
 
         RETURN(rc);
 }
 
 static int mdt_obd_disconnect(struct obd_export *exp)
 {
-        struct mdt_export_data *med = &exp->exp_mdt_data;
         unsigned long irqflags;
         int rc;
         ENTRY;
@@ -2346,8 +2365,6 @@ static int mdt_obd_disconnect(struct obd_export *exp)
         }
         spin_unlock_irqrestore(&exp->exp_lock, irqflags);
 
-        OBD_FREE_PTR(med->med_mcd);
-
         class_export_put(exp);
         RETURN(rc);
 }
@@ -2356,6 +2373,7 @@ static int mdt_obd_disconnect(struct obd_export *exp)
 static int mdt_init_export(struct obd_export *exp)
 {
         struct mdt_export_data *med = &exp->exp_mdt_data;
+        ENTRY;
 
         INIT_LIST_HEAD(&med->med_open_head);
         spin_lock_init(&med->med_open_lock);
index 40df23d..d274b37 100644 (file)
@@ -117,14 +117,13 @@ static int mdt_object_open(struct mdt_thread_info *info,
                           lmm, info->mti_mdt->mdt_max_mdsize, "lov");
         if (rc < 0)
                 GOTO(out, rc = -EINVAL);
-*/
-        rc = 0;
         if (S_ISDIR(info->mti_attr.la_mode))
                 repbody->valid |= OBD_MD_FLDIREA;
         else
                 repbody->valid |= OBD_MD_FLEASIZE;
         repbody->eadatasize = rc;
         rc = 0;
+*/
         mfd = mdt_mfd_new();
         if (mfd == NULL) {
                 CERROR("mds: out of memory\n");
@@ -275,8 +274,7 @@ int mdt_reint_open(struct mdt_thread_info *info)
 
         /* Open it now. */
         result = mdt_object_open(info, child, info->mti_attr.la_flags);
-        if (result == 0)
-                intent_set_disposition(ldlm_rep, DISP_OPEN_OPEN);
+        intent_set_disposition(ldlm_rep, DISP_OPEN_OPEN);
         GOTO(destroy_child, result);
 
 destroy_child: