X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Fosc_lock.c;h=d304fe1071af9bdcfe2c504ae0ba17ebd0a5a5fc;hp=85ab1321ce85f4b71545071348d99b65742659d0;hb=7c99f67d9d39e8a037e830cf08a9df305e6d8da2;hpb=6dc37759cfb22727ac5d776c38b72e8638563fd8;ds=sidebyside diff --git a/lustre/osc/osc_lock.c b/lustre/osc/osc_lock.c index 85ab132..d304fe10 100644 --- a/lustre/osc/osc_lock.c +++ b/lustre/osc/osc_lock.c @@ -423,13 +423,13 @@ static int osc_dlm_blocking_ast0(const struct lu_env *env, if (dlmlock->l_ast_data != NULL) { obj = osc2cl(dlmlock->l_ast_data); - dlmlock->l_ast_data = NULL; - cl_object_get(obj); } unlock_res_and_lock(dlmlock); + OBD_FAIL_TIMEOUT(OBD_FAIL_OSC_DELAY_CANCEL, 5); + /* if l_ast_data is NULL, the dlmlock was enqueued by AGL or * the object has been destroyed. */ if (obj != NULL) { @@ -445,6 +445,9 @@ static int osc_dlm_blocking_ast0(const struct lu_env *env, /* losing a lock, update kms */ lock_res_and_lock(dlmlock); + /* clearing l_ast_data after flushing data, + * to let glimpse ast find the lock and the object */ + dlmlock->l_ast_data = NULL; cl_object_attr_lock(obj); /* Must get the value under the lock to avoid race. */ old_kms = cl2osc(obj)->oo_oinfo->loi_kms;