Whamcloud - gitweb
LU-1059 clio: to not try to discard freeing pages
authorJinshan Xiong <jinshan.xiong@whamcloud.com>
Tue, 31 Jan 2012 21:30:21 +0000 (13:30 -0800)
committerOleg Drokin <green@whamcloud.com>
Wed, 15 Feb 2012 23:16:39 +0000 (18:16 -0500)
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 <jinshan.xiong@whamcloud.com>
Change-Id: I30631be98f1fcc1b98abe727c8c6984b918bfffd
Reviewed-on: http://review.whamcloud.com/2073
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Niu Yawei <niu@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdclass/cl_lock.c

index 4202603..6dfb955 100644 (file)
@@ -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);
                 }
         }