diff options
author | Pavel Emelyanov <xemul@virtuozzo.com> | 2017-02-03 16:23:00 +0300 |
---|---|---|
committer | Andrei Vagin <avagin@virtuozzo.com> | 2017-03-02 00:19:03 +0300 |
commit | 649280e31d0dd92954673836457f00ef79fd847e (patch) | |
tree | 8cff88aba7cc58c29f812888e8c06306b3a1ac61 | |
parent | 0d979b2934be8b7c5558420208e83f952b5231c8 (diff) |
pagemap: Fault inject partial pages.img read
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
-rw-r--r-- | criu/include/fault-injection.h | 1 | ||||
-rw-r--r-- | criu/pagemap.c | 13 | ||||
-rwxr-xr-x | test/jenkins/criu-fault.sh | 2 |
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 |