Whamcloud - gitweb
LU-6854 llite: Do not set writeback for sync write pages 10/15610/6
authorJinshan Xiong <jinshan.xiong@intel.com>
Wed, 15 Jul 2015 21:06:53 +0000 (14:06 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 9 Jan 2017 05:43:31 +0000 (05:43 +0000)
Sync-write pages don't have Dirty bit set, it will confuse newer
kernels by having writeback bit set.

Signed-off-by: Jinshan Xiong <jinshan.xiong@intel.com>
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
Change-Id: I2613919a9e942a7ee3dc48b250f7f0e5e4594e48
Reviewed-on: https://review.whamcloud.com/15610
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
lustre/llite/vvp_page.c
lustre/obdclass/cl_page.c

index 356b373..47d4863 100644 (file)
@@ -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_io *unused)
 {
        struct page *vmpage = cl2vm_page(slice);
+       struct cl_page *pg = slice->cpl_page;
 
        LASSERT(PageLocked(vmpage));
        LASSERT(!PageDirty(vmpage));
 
 
        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;
 }
 
        return 0;
 }
@@ -284,19 +288,21 @@ static void vvp_page_completion_write(const struct lu_env *env,
        struct page     *vmpage = vpg->vpg_page;
        ENTRY;
 
        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);
 
        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);
 
                vvp_vmpage_error(vvp_object_inode(pg->cp_obj), vmpage, ioret);
 
-       end_page_writeback(vmpage);
+               end_page_writeback(vmpage);
+       }
        EXIT;
 }
 
        EXIT;
 }
 
index 7d64d8e..cafeb04 100644 (file)
@@ -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);
 
        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;
 }
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", crt, result);
        return result;
 }