(2) add abort_recovery ioctl support for mdt.
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;
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);
*/
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);
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)
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);