If mdd prepare fails, lfsck data may not be initialized, mdd
lfsck stop should check this flag.
Add one test to fail mdt prepare, and system should not oops
upon this failure.
Signed-off-by: Lai Siyao <lai.siyao@intel.com>
Change-Id: Ie3e81a2a18aedaa47965800881292c122937506a
Reviewed-on: http://review.whamcloud.com/5519
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Ned Bass <bass6@llnl.gov>
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
#define OBD_FAIL_MDS_HSM_CT_UNREGISTER_NET 0x14e
#define OBD_FAIL_MDS_SWAP_LAYOUTS_NET 0x14f
#define OBD_FAIL_MDS_HSM_ACTION_NET 0x150
#define OBD_FAIL_MDS_HSM_CT_UNREGISTER_NET 0x14e
#define OBD_FAIL_MDS_SWAP_LAYOUTS_NET 0x14f
#define OBD_FAIL_MDS_HSM_ACTION_NET 0x150
+#define OBD_FAIL_MDS_CHANGELOG_INIT 0x151
/* layout lock */
#define OBD_FAIL_MDS_NO_LL_GETATTR 0x170
/* layout lock */
#define OBD_FAIL_MDS_NO_LL_GETATTR 0x170
struct llog_ctxt *ctxt = NULL, *uctxt = NULL;
int rc;
struct llog_ctxt *ctxt = NULL, *uctxt = NULL;
int rc;
+ ENTRY;
+
+ /* LU-2844 mdd setup failure should not cause umount oops */
+ if (OBD_FAIL_CHECK(OBD_FAIL_MDS_CHANGELOG_INIT))
+ RETURN(-EIO);
+
OBD_SET_CTXT_MAGIC(&obd->obd_lvfs_ctxt);
obd->obd_lvfs_ctxt.dt = mdd->mdd_bottom;
rc = llog_setup(env, obd, &obd->obd_olg, LLOG_CHANGELOG_ORIG_CTXT,
OBD_SET_CTXT_MAGIC(&obd->obd_lvfs_ctxt);
obd->obd_lvfs_ctxt.dt = mdd->mdd_bottom;
rc = llog_setup(env, obd, &obd->obd_olg, LLOG_CHANGELOG_ORIG_CTXT,
struct l_wait_info lwi = { 0 };
ENTRY;
struct l_wait_info lwi = { 0 };
ENTRY;
+ if (!lfsck->ml_initialized)
+ RETURN(0);
+
mutex_lock(&lfsck->ml_mutex);
spin_lock(&lfsck->ml_lock);
if (thread_is_init(thread) || thread_is_stopped(thread)) {
mutex_lock(&lfsck->ml_mutex);
spin_lock(&lfsck->ml_lock);
if (thread_is_init(thread) || thread_is_stopped(thread)) {
lu_context_enter(&session_ctx);
env.le_ses = &session_ctx;
lu_context_enter(&session_ctx);
env.le_ses = &session_ctx;
- dev->ld_ops->ldo_prepare(&env, NULL, dev);
+ rc = dev->ld_ops->ldo_prepare(&env, NULL, dev);
lu_env_fini(&env);
lu_context_exit(&session_ctx);
lu_env_fini(&env);
lu_context_exit(&session_ctx);
}
run_test 110f "remove remote directory: drop slave rep"
}
run_test 110f "remove remote directory: drop slave rep"
+# LU-2844 mdt prepare fail should not cause umount oops
+test_111 () {
+ local mdsdev=$(mdsdevname ${SINGLEMDS//mds/})
+#define OBD_FAIL_MDS_CHANGELOG_INIT 0x151
+ do_facet $SINGLEMDS lctl set_param fail_loc=0x151
+ stop $SINGLEMDS || error "stop MDS failed"
+ start $SINGLEMDS $mdsdev && error "start MDS should fail"
+ do_facet $SINGLEMDS lctl set_param fail_loc=0
+ start $SINGLEMDS $mdsdev || error "start MDS failed"
+}
+run_test 111 "mdd setup fail should not cause umount oops"
+
complete $SECONDS
check_and_cleanup_lustre
exit_status
complete $SECONDS
check_and_cleanup_lustre
exit_status