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)
+               set_page_writeback(vmpage);
+
        vvp_write_pending(cl2ccc(slice->cpl_obj), cl2ccc_page(slice));
 
        return 0;
        struct cl_page  *pg     = slice->cpl_page;
        struct page      *vmpage = cp->cpg_page;
 
-       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);
 
        /*
        cp->cpg_write_queued = 0;
        vvp_write_complete(cl2ccc(slice->cpl_obj), cp);
 
-       /*
-        * 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(ccc_object_inode(pg->cp_obj), vmpage, ioret);
 
-       end_page_writeback(vmpage);
+               end_page_writeback(vmpage);
+       }
 }
 
 /**
 
        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(env, pg)))));
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", crt, result);
        return result;
 }