Whamcloud - gitweb
(1) shrink rename reply;
authorhuanghua <huanghua>
Mon, 18 Sep 2006 07:11:12 +0000 (07:11 +0000)
committerhuanghua <huanghua>
Mon, 18 Sep 2006 07:11:12 +0000 (07:11 +0000)
(2) add abort_recovery ioctl support for mdt.

lustre/mdt/mdt_handler.c
lustre/mdt/mdt_recovery.c
lustre/mdt/mdt_reint.c

index 19ad2b7..dd03a60 100644 (file)
@@ -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);
index 5554043..5da6aeb 100644 (file)
@@ -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)
index fd251ff..51f6f01 100644 (file)
@@ -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);