From 61c86d721ccf8950d00a9438475d80370e66cb84 Mon Sep 17 00:00:00 2001 From: huanghua Date: Mon, 18 Sep 2006 07:11:12 +0000 Subject: [PATCH] (1) shrink rename reply; (2) add abort_recovery ioctl support for mdt. --- lustre/mdt/mdt_handler.c | 31 ++++++++++++++++++++++++------- lustre/mdt/mdt_recovery.c | 13 +++++++------ lustre/mdt/mdt_reint.c | 3 ++- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 19ad2b71..dd03a60 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -3174,9 +3174,10 @@ static int mdt_upcall(const struct lu_context *ctx, struct md_device *md, static int mdt_iocontrol(unsigned int cmd, struct obd_export *exp, int len, void *karg, void *uarg) { - struct lu_context ctxt; - struct mdt_device *mdt = mdt_dev(exp->exp_obd->obd_lu_dev); - struct dt_device *dt = mdt->mdt_bottom; + struct lu_context ctxt; + struct obd_device *obd= exp->exp_obd; + struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev); + struct dt_device *dt = mdt->mdt_bottom; int rc; ENTRY; @@ -3185,12 +3186,28 @@ static int mdt_iocontrol(unsigned int cmd, struct obd_export *exp, int len, if (rc) RETURN(rc); lu_context_enter(&ctxt); - if (cmd == OBD_IOC_SYNC || cmd == OBD_IOC_SET_READONLY) { + + switch (cmd) { + case OBD_IOC_SYNC: rc = dt->dd_ops->dt_sync(&ctxt, dt); - if (cmd == OBD_IOC_SET_READONLY) - dt->dd_ops->dt_ro(&ctxt, dt); - } else + break; + + case OBD_IOC_SET_READONLY: + rc = dt->dd_ops->dt_sync(&ctxt, dt); + dt->dd_ops->dt_ro(&ctxt, dt); + break; + + case OBD_IOC_ABORT_RECOVERY: + CERROR("aborting recovery for device %s\n", obd->obd_name); + target_abort_recovery(obd); + break; + + default: + CERROR("not supported cmd = %d for device %s\n", + cmd, obd->obd_name); rc = -EOPNOTSUPP; + } + lu_context_exit(&ctxt); lu_context_fini(&ctxt); RETURN(rc); diff --git a/lustre/mdt/mdt_recovery.c b/lustre/mdt/mdt_recovery.c index 5554043..5da6aeb 100644 --- a/lustre/mdt/mdt_recovery.c +++ b/lustre/mdt/mdt_recovery.c @@ -1002,7 +1002,8 @@ static void mdt_reconstruct_setattr(struct mdt_thread_info *mti) */ mdt_object_put(mti->mti_ctxt, obj); } -static void mdt_reconstruct_unlink(struct mdt_thread_info *mti) + +static void mdt_reconstruct_with_shrink(struct mdt_thread_info *mti) { mdt_reconstruct_generic(mti); mdt_shrink_reply(mti, REPLY_REC_OFF + 1); @@ -1012,11 +1013,11 @@ typedef void (*mdt_reconstructor)(struct mdt_thread_info *mti); static mdt_reconstructor reconstructors[REINT_MAX] = { [REINT_SETATTR] = mdt_reconstruct_setattr, - [REINT_CREATE] = mdt_reconstruct_create, - [REINT_LINK] = mdt_reconstruct_generic, - [REINT_UNLINK] = mdt_reconstruct_unlink, - [REINT_RENAME] = mdt_reconstruct_generic, - [REINT_OPEN] = mdt_reconstruct_open + [REINT_CREATE] = mdt_reconstruct_create, + [REINT_LINK] = mdt_reconstruct_generic, + [REINT_UNLINK] = mdt_reconstruct_with_shrink, + [REINT_RENAME] = mdt_reconstruct_with_shrink, + [REINT_OPEN] = mdt_reconstruct_open }; void mdt_reconstruct(struct mdt_thread_info *mti) diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index fd251ff..51f6f01 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -591,7 +591,8 @@ static int mdt_reint_rename(struct mdt_thread_info *info) rc = req_capsule_get_size(pill, &RMF_NAME, RCL_CLIENT); if (rc == 1) { /* if (rr->rr_name[0] == 0) {*/ - RETURN(mdt_reint_rename_tgt(info)); + rc = mdt_reint_rename_tgt(info); + GOTO(out, rc); } rc = mdt_rename_lock(info, &rename_lh); -- 1.8.3.1