mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-03 15:55:53 +00:00
fault: add dump pages fault for parasite_dump_pages_seized
Parasite should cleanup after fauilure and remove read-protection from VMAs. Check it with maps00 test & fault injection. Tested on travis with some addition: python test/zdtm.py run -t zdtm/static/maps00 --fault 3 --keep-going --report report -f h || false https://travis-ci.org/0x7f454c46/criu/jobs/119252291 Cc: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
058808007b
commit
35f209ff76
@@ -6,6 +6,7 @@ enum faults {
|
|||||||
FI_NONE = 0,
|
FI_NONE = 0,
|
||||||
FI_DUMP_EARLY,
|
FI_DUMP_EARLY,
|
||||||
FI_RESTORE_ROOT_ONLY,
|
FI_RESTORE_ROOT_ONLY,
|
||||||
|
FI_DUMP_PAGES,
|
||||||
/* not fatal */
|
/* not fatal */
|
||||||
FI_CHECK_OPEN_HANDLE = 128,
|
FI_CHECK_OPEN_HANDLE = 128,
|
||||||
FI_NO_MEMFD = 129,
|
FI_NO_MEMFD = 129,
|
||||||
|
12
criu/mem.c
12
criu/mem.c
@@ -20,6 +20,7 @@
|
|||||||
#include "restorer.h"
|
#include "restorer.h"
|
||||||
#include "files-reg.h"
|
#include "files-reg.h"
|
||||||
#include "pagemap-cache.h"
|
#include "pagemap-cache.h"
|
||||||
|
#include "fault-injection.h"
|
||||||
|
|
||||||
#include "protobuf.h"
|
#include "protobuf.h"
|
||||||
#include "images/pagemap.pb-c.h"
|
#include "images/pagemap.pb-c.h"
|
||||||
@@ -370,9 +371,18 @@ int parasite_dump_pages_seized(struct parasite_ctl *ctl,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fault_injected(FI_DUMP_PAGES)) {
|
||||||
|
pr_err("fault: Dump VMA pages failure!\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
ret = __parasite_dump_pages_seized(ctl, pargs, vma_area_list, pp);
|
ret = __parasite_dump_pages_seized(ctl, pargs, vma_area_list, pp);
|
||||||
if (ret)
|
|
||||||
|
if (ret) {
|
||||||
pr_err("Can't dump page with parasite\n");
|
pr_err("Can't dump page with parasite\n");
|
||||||
|
/* Parasite will unprotect VMAs after fail in fini() */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
pargs->add_prot = 0;
|
pargs->add_prot = 0;
|
||||||
if (parasite_execute_daemon(PARASITE_CMD_MPROTECT_VMAS, ctl)) {
|
if (parasite_execute_daemon(PARASITE_CMD_MPROTECT_VMAS, ctl)) {
|
||||||
|
@@ -4,5 +4,6 @@ source `dirname $0`/criu-lib.sh
|
|||||||
prep
|
prep
|
||||||
./test/zdtm.py run -t zdtm/static/env00 --fault 1 --keep-going --report report -f h || fail
|
./test/zdtm.py run -t zdtm/static/env00 --fault 1 --keep-going --report report -f h || fail
|
||||||
./test/zdtm.py run -t zdtm/static/unlink_fstat00 --fault 2 --keep-going --report report -f h || fail
|
./test/zdtm.py run -t zdtm/static/unlink_fstat00 --fault 2 --keep-going --report report -f h || fail
|
||||||
|
./test/zdtm.py run -t zdtm/static/maps00 --fault 3 --keep-going --report report -f h || fail
|
||||||
./test/zdtm.py run -t zdtm/static/inotify_irmap --fault 128 --keep-going --pre 2 -f uns || fail
|
./test/zdtm.py run -t zdtm/static/inotify_irmap --fault 128 --keep-going --pre 2 -f uns || fail
|
||||||
./test/zdtm.py run -t zdtm/static/env00 --fault 129 -f uns || fail
|
./test/zdtm.py run -t zdtm/static/env00 --fault 129 -f uns || fail
|
||||||
|
Reference in New Issue
Block a user