Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/checkpoint-restore/criu.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@virtuozzo.com>2017-02-03 16:23:00 +0300
committerAndrei Vagin <avagin@virtuozzo.com>2017-03-02 00:19:03 +0300
commit649280e31d0dd92954673836457f00ef79fd847e (patch)
tree8cff88aba7cc58c29f812888e8c06306b3a1ac61
parent0d979b2934be8b7c5558420208e83f952b5231c8 (diff)
pagemap: Fault inject partial pages.img read
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
-rw-r--r--criu/include/fault-injection.h1
-rw-r--r--criu/pagemap.c13
-rwxr-xr-xtest/jenkins/criu-fault.sh2
3 files changed, 16 insertions, 0 deletions
diff --git a/criu/include/fault-injection.h b/criu/include/fault-injection.h
index cf9859c1a..2b23f54bd 100644
--- a/criu/include/fault-injection.h
+++ b/criu/include/fault-injection.h
@@ -14,6 +14,7 @@ enum faults {
FI_CHECK_OPEN_HANDLE = 128,
FI_NO_MEMFD = 129,
FI_NO_BREAKPOINTS = 130,
+ FI_PARTIAL_PAGES = 131,
FI_MAX,
};
diff --git a/criu/pagemap.c b/criu/pagemap.c
index 463a22652..5c672dc08 100644
--- a/criu/pagemap.c
+++ b/criu/pagemap.c
@@ -11,6 +11,7 @@
#include "servicefd.h"
#include "pagemap.h"
+#include "fault-injection.h"
#include "xmalloc.h"
#include "protobuf.h"
#include "images/pagemap.pb-c.h"
@@ -438,6 +439,18 @@ static int process_async_reads(struct page_read *pr)
piov->to->iov_base, piov->to->iov_len);
more:
ret = preadv(fd, piov->to, piov->nr, piov->from);
+ if (fault_injected(FI_PARTIAL_PAGES)) {
+ /*
+ * We might have read everything, but for debug
+ * purposes let's try to force the advance_piov()
+ * and re-read tail.
+ */
+ if (ret > 0 && piov->nr >= 2) {
+ pr_debug("`- trim preadv %zu\n", ret);
+ ret /= 2;
+ }
+ }
+
if (ret != piov->end - piov->from) {
if (ret < 0) {
pr_err("Can't read async pr bytes (%zd / %ju read, %ju off, %d iovs)\n",
diff --git a/test/jenkins/criu-fault.sh b/test/jenkins/criu-fault.sh
index ab6c6c744..7ed26802b 100755
--- a/test/jenkins/criu-fault.sh
+++ b/test/jenkins/criu-fault.sh
@@ -18,3 +18,5 @@ prep
./test/zdtm.py run -t zdtm/static/unlink_fstat03 --fault 6 --report report || fail
./test/zdtm.py run -t zdtm/static/env00 --fault 5 --keep-going --report report || fail
+./test/zdtm.py run -t zdtm/static/maps04 --fault 131 --keep-going --report report --pre 2:1 || fail
+./test/zdtm.py run -t zdtm/transition/maps008 --fault 131 --keep-going --report report --pre 2:1 || fail