X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Fosc_lock.c;h=c673e9f47e2ac9623857282e7ab799cddcbf7c57;hp=de06556a80c07232c1768f9088cc20ba979ed3d7;hb=9fe4b52ad2;hpb=921fa0f21c1722e127fd072089ee35ddb0135653 diff --git a/lustre/osc/osc_lock.c b/lustre/osc/osc_lock.c index de06556..c673e9f 100644 --- a/lustre/osc/osc_lock.c +++ b/lustre/osc/osc_lock.c @@ -1330,14 +1330,32 @@ static int osc_lock_use(const struct lu_env *env, static int osc_lock_flush(struct osc_lock *ols, int discard) { - struct cl_lock *lock = ols->ols_cl.cls_lock; - struct cl_env_nest nest; - struct lu_env *env; - int result = 0; + struct cl_lock *lock = ols->ols_cl.cls_lock; + struct cl_env_nest nest; + struct lu_env *env; + int result = 0; + ENTRY; + + env = cl_env_nested_get(&nest); + if (!IS_ERR(env)) { + struct osc_object *obj = cl2osc(ols->ols_cl.cls_obj); + struct cl_lock_descr *descr = &lock->cll_descr; + int rc = 0; + + if (descr->cld_mode >= CLM_WRITE) { + result = osc_cache_writeback_range(env, obj, + descr->cld_start, descr->cld_end, + 1, discard); + CDEBUG(D_DLMTRACE, "write out %d pages for lock %p.\n", + result, lock); + if (result > 0) + result = 0; + } + + rc = cl_lock_discard_pages(env, lock); + if (result == 0 && rc < 0) + result = rc; - env = cl_env_nested_get(&nest); - if (!IS_ERR(env)) { - result = cl_lock_page_out(env, lock, discard); cl_env_nested_put(&nest, env); } else result = PTR_ERR(env); @@ -1345,7 +1363,7 @@ static int osc_lock_flush(struct osc_lock *ols, int discard) ols->ols_flush = 1; LINVRNT(!osc_lock_has_pages(ols)); } - return result; + RETURN(result); } /**