[CRIU] [PATCH 2/2] pagemap: Fault inject partial pages.img read

Pavel Emelyanov xemul at virtuozzo.com
Mon Feb 6 02:24:18 PST 2017


On 02/05/2017 03:18 PM, Mike Rapoport wrote:
> On Fri, Feb 03, 2017 at 04:23:17PM +0300, Pavel Emelyanov wrote:
>>
>> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
>>
>> ---
>>  criu/include/fault-injection.h |  1 +
>>  criu/pagemap.c                 | 13 +++++++++++++
>>  test/jenkins/criu-fault.sh     |  2 ++
>>  3 files changed, 16 insertions(+)
>>
>> diff --git a/criu/include/fault-injection.h b/criu/include/fault-injection.h
>> index cf9859c..2b23f54 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 cb4c990..1fc9ba7 100644
>> --- a/criu/pagemap.c
>> +++ b/criu/pagemap.c
>> @@ -12,6 +12,7 @@
>>  #include "pagemap.h"
>>  #include "page-xfer.h"
>>
>> +#include "fault-injection.h"
>>  #include "xmalloc.h"
>>  #include "protobuf.h"
>>  #include "images/pagemap.pb-c.h"
>> @@ -494,6 +495,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;
>> +			}
>> +		}
>> +
> 
> Maybe wrap pread + fault injection to pread_with_fault?

Hm... And use it everywhere we _know_ re-read is OK. Good idea :) Do you know any
other place that deserves this?

> 
>>  		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 ab6c6c7..7ed2680 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
>> -- 
>> 2.1.4
>>
>> _______________________________________________
>> CRIU mailing list
>> CRIU at openvz.org
>> https://lists.openvz.org/mailman/listinfo/criu
>>
> 
> .
> 



More information about the CRIU mailing list