[CRIU] [PATCH] dump: pre-load kernel modules
Christopher Covington
cov at codeaurora.org
Thu Dec 11 13:55:34 PST 2014
On 10/14/2014 06:21 AM, Pavel Emelyanov wrote:
> On 10/14/2014 11:49 AM, Tycho Andersen wrote:
>> diff --git a/sockets.c b/sockets.c
>> index 0268d35..6c71503 100644
>> --- a/sockets.c
>> +++ b/sockets.c
>> @@ -96,6 +96,41 @@ bool socket_test_collect_bit(unsigned int family, unsigned int proto)
>> return test_bit(nr, socket_cl_bits) != 0;
>> }
>>
>> +void preload_socket_modules()
>> +{
>> + /*
>> + * If the task to dump (e.g. an LXC container) has any netlink
>> + * KOBJECT_UEVENT socket open and the _diag modules aren't
>> + * loaded is dumped, criu will freeze the task and then the
>> + * kernel will send it messages on the socket, and then we will
>> + * fail to dump because the socket has pending data. The Real
>> + * Solution is to dump this pending data, but we just modprobe
>> + * things beforehand for now so that the first dump doesn't
>> + * fail.
>> + *
>> + * We ignore failure since these could be compiled directly
>> + * in, instead of being kernel modules.
>> + */
>> + char *modules[] = {
>> + "netlink_diag",
>> + "af_packet_diag",
>> + "udp_diag",
>> + "tcp_diag",
>> + "unix_diag",
>> + NULL,
>> + };
>> + int i;
>> + char *args[2] = {
>> + "modprobe",
>> + NULL
>> + };
>> +
>> + for (i = 0; modules[i]; i++) {
>> + args[1] = modules[i];
>> + cr_system(-1, -1, -1, args[0], args);
With this patch I get the following spurious prints. Is there some way they
could be avoided?
(00.058688) Error (util.c:571): exited, status=1
(00.112076) Error (util.c:571): exited, status=1
(00.161681) Error (util.c:571): exited, status=1
(00.200197) Error (util.c:571): exited, status=1
(00.251205) Error (util.c:571): exited, status=1
>> + }
>> +}
Thanks,
Chris
--
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
More information about the CRIU
mailing list