X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_hsm_cdt_client.c;h=aa4f123270820b0a40a68404b3bfc9738d3799fd;hp=e1f167377fd273bbd38fd550e8a5f054a36fcf39;hb=37a5157b84bce367e31743cb8648a15618492531;hpb=7af6307ba4e67673bc52aaaeb54f2cb4b632a3b7 diff --git a/lustre/mdt/mdt_hsm_cdt_client.c b/lustre/mdt/mdt_hsm_cdt_client.c index e1f1673..aa4f123 100644 --- a/lustre/mdt/mdt_hsm_cdt_client.c +++ b/lustre/mdt/mdt_hsm_cdt_client.c @@ -446,10 +446,25 @@ int mdt_hsm_add_actions(struct mdt_thread_info *mti, mdt_object_put(mti->mti_env, obj); mutex_lock(&cdt->cdt_restore_lock); + if (unlikely((cdt->cdt_state == CDT_STOPPED) || + (cdt->cdt_state == CDT_STOPPING))) { + mutex_unlock(&cdt->cdt_restore_lock); + mdt_object_unlock(mti, NULL, &crh->crh_lh, 1); + OBD_SLAB_FREE_PTR(crh, mdt_hsm_cdt_kmem); + GOTO(out, rc = -EAGAIN); + } list_add_tail(&crh->crh_list, &cdt->cdt_restore_hdl); mutex_unlock(&cdt->cdt_restore_lock); } record: + /* + * Wait here to catch the 2nd RESTORE request to the same FID. + * Normally layout lock protects against adding such request. + * But when cdt is stopping it cancel all locks via + * ldlm_resource_clean and protections may not work. + * See LU-9266 and sanity-hsm_407 for details. + */ + OBD_FAIL_TIMEOUT(OBD_FAIL_MDS_HSM_CDT_DELAY, cfs_fail_val); /* record request */ rc = mdt_agent_record_add(mti->mti_env, mdt, compound_id, archive_id, flags, hai);