From: huanghua Date: Sun, 9 Jul 2006 17:33:58 +0000 (+0000) Subject: fix some bug: X-Git-Tag: v1_8_0_110~486^2~1462 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=c0474c5cf0770f3c9e1ec4b0cef69d3047b858f0;p=fs%2Flustre-release.git fix some bug: (1) duplicate memory in mdt_obd_disconnect & mdt_client_free; (2) comment out some read & write code; (3) transaction related. (still need more work) --- diff --git a/lustre/mdt/mdt_fs.c b/lustre/mdt/mdt_fs.c index cf67877..7afdbf5 100644 --- a/lustre/mdt/mdt_fs.c +++ b/lustre/mdt/mdt_fs.c @@ -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); diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index edbc482..df29f6b 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -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); diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 40df23d..d274b37 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -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: