[CRIU] [PATCH 2/2]v2 service: add support for check request

Ruslan Kuprieiev kupruser at gmail.com
Tue Nov 19 03:44:07 PST 2013


On 19.11.2013 11:36, Pavel Emelyanov wrote:
> On 11/18/2013 06:25 PM, Ruslan Kuprieiev wrote:
>> Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
>> ---
>>   cr-service.c | 37 +++++++++++++++++++++++++++++++++++++
>>   1 file changed, 37 insertions(+)
>>
>> diff --git a/cr-service.c b/cr-service.c
>> index 65710fd..c337fce 100644
>> --- a/cr-service.c
>> +++ b/cr-service.c
>> @@ -217,6 +217,41 @@ exit:
>>   	return success ? 0 : 1;
>>   }
>>   
>> +/*
>> + * Only checks criu ability to work in this enviroment.
>> + */
>> +static int check_using_req(int sk, CriuOpts *req)
>> +{
>> +	bool success = false;
>> +	CriuResp msg = CRIU_RESP__INIT;
>> +	CriuCheckResp resp = CRIU_CHECK_RESP__INIT;
>> +
>> +	if (setup_opts_from_req(sk, req) == -1) {
>> +		pr_perror("Arguments treating fail");
>> +		goto exit;
>> +	}
>> +
>> +	if (cr_check() < 0) {
>> +		pr_perror("The kernel support isn't up-to-date");
>> +		goto exit;
>> +	}
>> +
>> +	resp.kernel = true;
> Always true argument is pointless.

But resp.kernel = false after init. If cr_check() does not fail, we set 
resp.kernel to true, and if cr_check() does fail - resp.kernel = false.

>> +
>> +	success = true;
>> +exit:
>> +	msg.type = CRIU_REQ_TYPE__CHECK;
>> +	msg.success = success;
>> +	msg.check = &resp;
>> +
>> +	if (send_criu_msg(sk, &msg) == -1) {
>> +		pr_perror("Can't send response");
>> +		success = false;
>> +	}
>> +
>> +	return success ? 0 : 1;
>> +}
>> +
>>   static int cr_service_work(int sk)
>>   {
>>   	CriuReq *msg = 0;
>> @@ -233,6 +268,8 @@ static int cr_service_work(int sk)
>>   		return dump_using_req(sk, msg->opts);
>>   	case CRIU_REQ_TYPE__RESTORE:
>>   		return restore_using_req(sk, msg->opts);
>> +	case CRIU_REQ_TYPE__CHECK:
>> +		return check_using_req(sk, msg->opts);
>>   
>>   	default: {
>>   		CriuResp resp = CRIU_RESP__INIT;
>>
>



More information about the CRIU mailing list