From eb32be96f47216eb34dba97014c8faa0c5f3fa21 Mon Sep 17 00:00:00 2001 From: huanghua Date: Tue, 12 Sep 2006 04:11:06 +0000 Subject: [PATCH] (1) fix a bug in write mcd: about memcpy argument; (2) add some debug code for read & write last_rcvd record; (3) rmmod manually. --- lustre/mdt/mdt_recovery.c | 63 ++++++++++++++++++++++++++++++++++++----------- lustre/utils/rmmod_all.sh | 1 + 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/lustre/mdt/mdt_recovery.c b/lustre/mdt/mdt_recovery.c index 5f98f7c..fd73f63 100644 --- a/lustre/mdt/mdt_recovery.c +++ b/lustre/mdt/mdt_recovery.c @@ -96,6 +96,7 @@ static void mdt_trans_stop(const struct lu_context *ctx, static inline void msd_le_to_cpu(struct mdt_server_data *buf, struct mdt_server_data *msd) { + memcpy(msd->msd_uuid, buf->msd_uuid, sizeof (msd->msd_uuid)); msd->msd_last_transno = le64_to_cpu(buf->msd_last_transno); msd->msd_mount_count = le64_to_cpu(buf->msd_mount_count); msd->msd_feature_compat = le32_to_cpu(buf->msd_feature_compat); @@ -109,6 +110,7 @@ static inline void msd_le_to_cpu(struct mdt_server_data *buf, static inline void msd_cpu_to_le(struct mdt_server_data *msd, struct mdt_server_data *buf) { + memcpy(buf->msd_uuid, msd->msd_uuid, sizeof (msd->msd_uuid)); buf->msd_last_transno = cpu_to_le64(msd->msd_last_transno); buf->msd_mount_count = cpu_to_le64(msd->msd_mount_count); buf->msd_feature_compat = cpu_to_le32(msd->msd_feature_compat); @@ -122,6 +124,7 @@ static inline void msd_cpu_to_le(struct mdt_server_data *msd, static inline void mcd_le_to_cpu(struct mdt_client_data *buf, struct mdt_client_data *mcd) { + memcpy(mcd->mcd_uuid, buf->mcd_uuid, sizeof (mcd->mcd_uuid)); mcd->mcd_last_transno = le64_to_cpu(buf->mcd_last_transno); mcd->mcd_last_xid = le64_to_cpu(buf->mcd_last_xid); mcd->mcd_last_result = le32_to_cpu(buf->mcd_last_result); @@ -134,6 +137,7 @@ static inline void mcd_le_to_cpu(struct mdt_client_data *buf, static inline void mcd_cpu_to_le(struct mdt_client_data *mcd, struct mdt_client_data *buf) { + memcpy(buf->mcd_uuid, mcd->mcd_uuid, sizeof (mcd->mcd_uuid)); buf->mcd_last_transno = cpu_to_le64(mcd->mcd_last_transno); buf->mcd_last_xid = cpu_to_le64(mcd->mcd_last_xid); buf->mcd_last_result = cpu_to_le32(mcd->mcd_last_result); @@ -156,13 +160,19 @@ static int mdt_last_rcvd_header_read(const struct lu_context *ctx, /* temporary stuff for read */ tmp = &mti->mti_msd; off = &mti->mti_off; + *off = 0; rc = mdt_record_read(ctx, mdt->mdt_last_rcvd, tmp, sizeof(*tmp), off); - if (rc == 0) { - memcpy(msd->msd_uuid, tmp->msd_uuid, sizeof (msd->msd_uuid)); + if (rc == 0) msd_le_to_cpu(tmp, msd); - } - return 0; + + CDEBUG(D_INFO, "read last_rcvd header rc = %d:\n" + "uuid = %s\n" + "last_transno = "LPU64"\n", + rc, + msd->msd_uuid, + msd->msd_last_transno); + return rc; } static int mdt_last_rcvd_header_write(const struct lu_context *ctx, @@ -185,18 +195,21 @@ static int mdt_last_rcvd_header_write(const struct lu_context *ctx, /* temporary stuff for read */ tmp = &mti->mti_msd; off = &mti->mti_off; - - memcpy(tmp->msd_uuid, msd->msd_uuid, sizeof (msd->msd_uuid)); + *off = 0; + msd_cpu_to_le(msd, tmp); rc = mdt_record_write(ctx, mdt->mdt_last_rcvd, tmp, sizeof(*tmp), off, th); - CDEBUG(D_INFO, "write last_rcvd header (rc = %d):\n" - "uuid = %s\nlast_transno = "LPU64"\n", - rc, msd->msd_uuid, msd->msd_last_transno); - mdt_trans_stop(ctx, mdt, th); + + CDEBUG(D_INFO, "write last_rcvd header rc = %d:\n" + "uuid = %s\n" + "last_transno = "LPU64"\n", + rc, + msd->msd_uuid, + msd->msd_last_transno); return rc; } @@ -211,10 +224,29 @@ static int mdt_last_rcvd_read(const struct lu_context *ctx, mti = lu_context_key_get(ctx, &mdt_thread_key); tmp = &mti->mti_mcd; rc = mdt_record_read(ctx, mdt->mdt_last_rcvd, tmp, sizeof(*tmp), off); - if (rc == 0) { - memcpy(mcd->mcd_uuid, tmp->mcd_uuid, sizeof (mcd->mcd_uuid)); + if (rc == 0) mcd_le_to_cpu(tmp, mcd); - } + + CDEBUG(D_INFO, "read mcd @%d rc = %d:\n" + "uuid = %s\n" + "last_transno = "LPU64"\n" + "last_xid = "LPU64"\n" + "last_result = %d\n" + "last_data = %d\n" + "last_close_transno = "LPU64"\n" + "last_close_xid = "LPU64"\n" + "last_close_result = %d\n", + (int)*off - sizeof(*tmp), + rc, + mcd->mcd_uuid, + mcd->mcd_last_transno, + mcd->mcd_last_xid, + mcd->mcd_last_result, + mcd->mcd_last_data, + mcd->mcd_last_close_transno, + mcd->mcd_last_close_xid, + mcd->mcd_last_close_result); + return rc; } @@ -231,13 +263,12 @@ static int mdt_last_rcvd_write(const struct lu_context *ctx, mti = lu_context_key_get(ctx, &mdt_thread_key); tmp = &mti->mti_mcd; - memcpy(mcd->mcd_uuid, tmp->mcd_uuid, sizeof (mcd->mcd_uuid)); mcd_cpu_to_le(mcd, tmp); rc = mdt_record_write(ctx, mdt->mdt_last_rcvd, tmp, sizeof(*tmp), off, th); - CDEBUG(D_INFO, "write mcd rc = %d:\n" + CDEBUG(D_INFO, "write mcd @%d rc = %d:\n" "uuid = %s\n" "last_transno = "LPU64"\n" "last_xid = "LPU64"\n" @@ -246,6 +277,7 @@ static int mdt_last_rcvd_write(const struct lu_context *ctx, "last_close_transno = "LPU64"\n" "last_close_xid = "LPU64"\n" "last_close_result = %d\n", + (int)*off - sizeof(*tmp), rc, mcd->mcd_uuid, mcd->mcd_last_transno, @@ -394,6 +426,7 @@ static int mdt_server_data_init(const struct lu_context *ctx, msd->msd_feature_incompat = OBD_INCOMPAT_MDT | OBD_INCOMPAT_COMMON_LR; } else { + LCONSOLE_WARN("%s: used disk, loading\n", obd->obd_name); rc = mdt_last_rcvd_header_read(ctx, mdt, msd); if (rc) { CERROR("error reading MDS %s: rc %d\n", LAST_RCVD, rc); diff --git a/lustre/utils/rmmod_all.sh b/lustre/utils/rmmod_all.sh index 0e1726f..be1ff5f 100755 --- a/lustre/utils/rmmod_all.sh +++ b/lustre/utils/rmmod_all.sh @@ -3,6 +3,7 @@ SRCDIR=`dirname $0` PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH +rmmod quotacheck_test quotactl_test quotafmt_test pingsrv pingcli lctl modules | awk '{ print $2 }' | xargs rmmod >/dev/null 2>&1 # do it again, in case we tried to unload ksocklnd too early lsmod | grep lnet > /dev/null && lctl modules | awk '{ print $2 }' | xargs rmmod -- 1.8.3.1