Whamcloud - gitweb
LU-11663 osd-zfs: write partial pages with correct offset 48/33748/3
authorAlex Zhuravlev <bzzz@whamcloud.com>
Tue, 27 Nov 2018 06:47:50 +0000 (09:47 +0300)
committerOleg Drokin <green@whamcloud.com>
Fri, 30 Nov 2018 18:29:01 +0000 (18:29 +0000)
otherwise non-aligned writes send wrong data to ZFS.

Lustre-change: https://review.whamcloud.com/33726
Lustre-commit: 6f9a0292eacb0d603b14cc03290a574cb7f0c846
Change-Id: I1ae1f361981d548307d74344a5694f3ef39c0609
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/33748
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Hongchao Zhang <hongchao@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/osd-zfs/osd_io.c
lustre/tests/sanity.sh

index 38cc15f..6cf1e8c 100644 (file)
@@ -823,8 +823,8 @@ static int osd_write_commit(const struct lu_env *env, struct dt_object *dt,
 
                if (lnb[i].lnb_page->mapping == (void *)obj) {
                        osd_dmu_write(osd, obj->oo_dn, lnb[i].lnb_file_offset,
-                                     lnb[i].lnb_len, kmap(lnb[i].lnb_page),
-                                     oh->ot_tx);
+                                     lnb[i].lnb_len, kmap(lnb[i].lnb_page) +
+                                     lnb[i].lnb_page_offset, oh->ot_tx);
                        kunmap(lnb[i].lnb_page);
                        iosize += lnb[i].lnb_len;
                } else if (lnb[i].lnb_data) {
index 5ba0434..47cf6a1 100755 (executable)
@@ -17019,6 +17019,21 @@ test_805() {
 }
 run_test 805 "ZFS can remove from full fs"
 
+test_810() {
+       local ORIG
+       local CSUM
+
+       lctl set_param fail_loc=0x411
+       dd if=/dev/urandom of=$DIR/$tfile bs=10240 count=2
+       ORIG=$(md5sum $DIR/$tfile)
+       lctl set_param ldlm.namespaces.*osc*.lru_size=clear
+       CSUM=$(md5sum $DIR/$tfile)
+       if [ "$ORIG" != "$CSUM" ]; then
+               error "$ORIG != $CSUM"
+       fi
+}
+run_test 810 "partial page writes on ZFS (LU-11663)"
+
 #
 # tests that do cleanup/setup should be run at the end
 #