From 610ac5c64d92f95924da839d3a2da28e9909956a Mon Sep 17 00:00:00 2001 From: Jinshan Xiong Date: Wed, 15 Jul 2015 14:06:53 -0700 Subject: [PATCH] LU-6854 llite: Do not set writeback for sync write pages Sync-write pages don't have Dirty bit set, it will confuse newer kernels by having writeback bit set. Signed-off-by: Jinshan Xiong Signed-off-by: Oleg Drokin Change-Id: I2613919a9e942a7ee3dc48b250f7f0e5e4594e48 Reviewed-on: https://review.whamcloud.com/15610 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Bob Glossman Reviewed-by: Lai Siyao Reviewed-by: Yang Sheng --- lustre/llite/vvp_page.c | 26 ++++++++++++++++---------- lustre/obdclass/cl_page.c | 3 --- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lustre/llite/vvp_page.c b/lustre/llite/vvp_page.c index 356b373..47d4863 100644 --- a/lustre/llite/vvp_page.c +++ b/lustre/llite/vvp_page.c @@ -209,11 +209,15 @@ static int vvp_page_prep_write(const struct lu_env *env, struct cl_io *unused) { struct page *vmpage = cl2vm_page(slice); + struct cl_page *pg = slice->cpl_page; LASSERT(PageLocked(vmpage)); LASSERT(!PageDirty(vmpage)); - set_page_writeback(vmpage); + /* ll_writepage path is not a sync write, so need to set page writeback + * flag */ + if (pg->cp_sync_io == NULL) + set_page_writeback(vmpage); return 0; } @@ -284,19 +288,21 @@ static void vvp_page_completion_write(const struct lu_env *env, struct page *vmpage = vpg->vpg_page; ENTRY; - LASSERT(ergo(pg->cp_sync_io != NULL, PageLocked(vmpage))); - LASSERT(PageWriteback(vmpage)); - CL_PAGE_HEADER(D_PAGE, env, pg, "completing WRITE with %d\n", ioret); - /* - * Only mark the page error only when it's an async write because - * applications won't wait for IO to finish. - */ - if (pg->cp_sync_io == NULL) + if (pg->cp_sync_io != NULL) { + LASSERT(PageLocked(vmpage)); + LASSERT(!PageWriteback(vmpage)); + } else { + LASSERT(PageWriteback(vmpage)); + /* + * Only mark the page error only when it's an async write + * because applications won't wait for IO to finish. + */ vvp_vmpage_error(vvp_object_inode(pg->cp_obj), vmpage, ioret); - end_page_writeback(vmpage); + end_page_writeback(vmpage); + } EXIT; } diff --git a/lustre/obdclass/cl_page.c b/lustre/obdclass/cl_page.c index 7d64d8e..cafeb04 100644 --- a/lustre/obdclass/cl_page.c +++ b/lustre/obdclass/cl_page.c @@ -879,9 +879,6 @@ int cl_page_prep(const struct lu_env *env, struct cl_io *io, if (result == 0) cl_page_io_start(env, pg, crt); - KLASSERT(ergo(crt == CRT_WRITE && pg->cp_type == CPT_CACHEABLE, - equi(result == 0, - PageWriteback(cl_page_vmpage(pg))))); CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", crt, result); return result; } -- 1.8.3.1