From bba9d6d23609f79b9d6d15543a4c805b53b16d42 Mon Sep 17 00:00:00 2001
From: Kirill Smelkov <kirr@nexedi.com>
Date: Thu, 11 Jul 2019 19:47:49 +0300
Subject: [PATCH] .

---
 bigfile/tests/test_virtmem.c | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/bigfile/tests/test_virtmem.c b/bigfile/tests/test_virtmem.c
index 54e5ceda..3293ee4b 100644
--- a/bigfile/tests/test_virtmem.c
+++ b/bigfile/tests/test_virtmem.c
@@ -1476,11 +1476,38 @@ void test_file_access_mmapbase(void)
     ok1(!M(vma, 2));    CHECK_NOPAGE(         102                      );
     ok1(!M(vma, 3));    CHECK_NOPAGE(         103                      );
 
+    /* writeout in 3 variants - STORE, MARK, STORE+MARK */
+    diag("writeout");
 
+    vma_unmap(vma);
+    CHECK_NOPAGE(         100                      );
+    CHECK_NOPAGE(         101                      );
+    CHECK_NOPAGE(         102                      );
+    CHECK_NOPAGE(         103                      );
 
-    // XXX writeout STORE, MARK, STORE+MARK
-    diag("writeout");
+    page0 = page2 = page3 = NULL;
+
+    /* mkdirty2 prepares state with 2 dirty pages only 1 of which is mapped */
+    void mkdirty2(int gen) {
+        err = fileh_mmap(vma, fh, 100, 4);
+        ok1(!err);
+
+        B(vma, 0*PSb) = gen + 0;
+        B(vma, 2*PSb) = gen + 2;
+        vma_unmap(vma);
+        page0 = pagemap_get(&fh->pagemap, 100); ok1(page0);
+        page2 = pagemap_get(&fh->pagemap, 102); ok1(page2);
+
+        err = fileh_mmap(vma, fh, 100, 2); /* note - only 2 pages */
+        ok1(!err);
+
+        ok1( M(vma, 0));    CHECK_PAGE  (page0,   100,    PAGE_DIRTY,     1);
+        ok1(!M(vma, 1));    CHECK_NOPAGE(         101                      );
+                            CHECK_PAGE  (page2,   102,    PAGE_DIRTY,     0);
+                            CHECK_NOPAGE(         103                      );
+    }
 
+    mkdirty2(10);
 
 
 
-- 
2.30.9