From 79cca45d7fa4ea2f77cb0c7d13b6bad948249d99 Mon Sep 17 00:00:00 2001 From: Jinshan Xiong Date: Tue, 31 Jan 2012 13:30:21 -0800 Subject: [PATCH] LU-1059 clio: to not try to discard freeing pages This is a bug imported in LU-948. We should check if we have owned the page successfully before trying to discard it. Signed-off-by: Jinshan Xiong Change-Id: I30631be98f1fcc1b98abe727c8c6984b918bfffd Reviewed-on: http://review.whamcloud.com/2073 Reviewed-by: James Simmons Tested-by: Hudson Tested-by: Maloo Reviewed-by: Niu Yawei Reviewed-by: Oleg Drokin --- lustre/obdclass/cl_lock.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lustre/obdclass/cl_lock.c b/lustre/obdclass/cl_lock.c index 4202603..6dfb955 100644 --- a/lustre/obdclass/cl_lock.c +++ b/lustre/obdclass/cl_lock.c @@ -1926,11 +1926,13 @@ static int check_and_discard_cb(const struct lu_env *env, struct cl_io *io, if (tmp->cll_descr.cld_end == CL_PAGE_EOF) info->clt_fn_index = CL_PAGE_EOF; cl_lock_put(env, tmp); - } else { /* discard the page */ - cl_page_own(env, io, page); + } else if (cl_page_own(env, io, page) == 0) { + /* discard the page */ cl_page_unmap(env, io, page); cl_page_discard(env, io, page); cl_page_disown(env, io, page); + } else { + LASSERT(page->cp_state == CPS_FREEING); } } -- 1.8.3.1