From: Vitaly Fertman Date: Fri, 10 Dec 2010 13:01:42 +0000 (+0300) Subject: b=23848 mdc_clear_open_replay_data() ASSERTION(mod != LP_POISON && mod != NULL) X-Git-Tag: 2.0.59.0~32 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=dfff88032a23483b085e1677afefd4e313aab1f0;p=fs%2Flustre-release.git b=23848 mdc_clear_open_replay_data() ASSERTION(mod != LP_POISON && mod != NULL) it is possible to have no md_open_data on close for some recovery cases. also avoid ELC for recovery tests which rely on lost blocking AST rpc. --- diff --git a/lustre/mdc/mdc_reint.c b/lustre/mdc/mdc_reint.c index f615b34..89cd5be 100644 --- a/lustre/mdc/mdc_reint.c +++ b/lustre/mdc/mdc_reint.c @@ -132,7 +132,8 @@ int mdc_setattr(struct obd_export *exp, struct md_op_data *op_data, if (op_data->op_attr.ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) bits |= MDS_INODELOCK_LOOKUP; if ((op_data->op_flags & MF_MDC_CANCEL_FID1) && - (fid_is_sane(&op_data->op_fid1))) + (fid_is_sane(&op_data->op_fid1)) && + !OBD_FAIL_CHECK(OBD_FAIL_LDLM_BL_CALLBACK)) count = mdc_resource_get_unused(exp, &op_data->op_fid1, &cancels, LCK_EX, bits); req = ptlrpc_request_alloc(class_exp2cliimp(exp), @@ -319,12 +320,14 @@ int mdc_unlink(struct obd_export *exp, struct md_op_data *op_data, LASSERT(req == NULL); if ((op_data->op_flags & MF_MDC_CANCEL_FID1) && - (fid_is_sane(&op_data->op_fid1))) + (fid_is_sane(&op_data->op_fid1)) && + !OBD_FAIL_CHECK(OBD_FAIL_LDLM_BL_CALLBACK)) count = mdc_resource_get_unused(exp, &op_data->op_fid1, &cancels, LCK_EX, MDS_INODELOCK_UPDATE); if ((op_data->op_flags & MF_MDC_CANCEL_FID3) && - (fid_is_sane(&op_data->op_fid3))) + (fid_is_sane(&op_data->op_fid3)) && + !OBD_FAIL_CHECK(OBD_FAIL_LDLM_BL_CALLBACK)) count += mdc_resource_get_unused(exp, &op_data->op_fid3, &cancels, LCK_EX, MDS_INODELOCK_FULL); diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index dff860bc..92c453c 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -767,7 +767,14 @@ int mdc_clear_open_replay_data(struct obd_export *exp, struct md_open_data *mod = och->och_mod; ENTRY; - LASSERT(mod != LP_POISON && mod != NULL); + /** + * It is possible to not have \var mod in a case of eviction between + * lookup and ll_file_open(). + **/ + if (mod == NULL) + RETURN(0); + + LASSERT(mod != LP_POISON); mod->mod_och = NULL; och->och_mod = NULL;