Whamcloud - gitweb
LU-5552 llite: make sure we do cl_page_clip on the last page 30/11630/2
authorLi Dongyang <dongyang.li@anu.edu.au>
Thu, 28 Aug 2014 02:17:33 +0000 (12:17 +1000)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 1 Sep 2014 16:24:34 +0000 (16:24 +0000)
When we are doing a partial IO on both first and last page,
the logic currently only call cl_page_clip on the first page, which
will end up with a incorrect i_size.

Signed-off-by: Li Dongyang <dongyang.li@anu.edu.au>
Change-Id: Ia7be3d71e535d583cb424bb816c14015d3141cdb
Reviewed-on: http://review.whamcloud.com/11630
Reviewed-by: Ian Costello <costello.ian@gmail.com>
Tested-by: Jenkins
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Reviewed-by: Li Xi <pkuelelixi@gmail.com>
Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/llite/vvp_io.c

index fff352f..df42e28 100644 (file)
@@ -606,11 +606,13 @@ static int vvp_io_commit_sync(const struct lu_env *env, struct cl_io *io,
                page = cl_page_list_first(plist);
                if (plist->pl_nr == 1) {
                        cl_page_clip(env, page, from, to);
                page = cl_page_list_first(plist);
                if (plist->pl_nr == 1) {
                        cl_page_clip(env, page, from, to);
-               } else if (from > 0) {
-                       cl_page_clip(env, page, from, PAGE_SIZE);
                } else {
                } else {
-                       page = cl_page_list_last(plist);
-                       cl_page_clip(env, page, 0, to);
+                       if (from > 0)
+                               cl_page_clip(env, page, from, PAGE_SIZE);
+                       if (to != PAGE_SIZE) {
+                               page = cl_page_list_last(plist);
+                               cl_page_clip(env, page, 0, to);
+                       }
                }
        }
 
                }
        }