[CRIU] [PATCH] shm: Do not dump sysvshm twice

Andrei Vagin avagin at virtuozzo.com
Fri Mar 31 12:36:34 PDT 2017


Applied
On Fri, Mar 31, 2017 at 06:49:59PM +0300, Pavel Emelyanov wrote:
> The contents of sysvshm areas is sometimes dumped twice.
> 
> First time it goes via cr_dump_shmem(), since each attachment
> of the segment is noted by the add_shmem_area() and thus
> gets into the list scanned by the former call().
> 
> Second time it is dumped by dump_ipc_shm_pages().
> 
> Another thing is that in the 1st dump memory gets into the
> standard pagemap/pages image pair, while in the 2nd time
> it's all written as plain byte array into ipcns-shm.img.
> 
> At restore contents is read from the ipcns-shm.img (2nd).
> 
> While the first way is preferred, let's (temporarily)
> eliminate it. Historically these segments were dumped and
> restored the 2nd way.
> 
> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
> 
> ---
>  criu/shmem.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/criu/shmem.c b/criu/shmem.c
> index 21a9d8b..862af40 100644
> --- a/criu/shmem.c
> +++ b/criu/shmem.c
> @@ -589,6 +589,9 @@ int add_shmem_area(pid_t pid, VmaEntry *vma, u64 *map)
>  	struct shmem_info *si;
>  	unsigned long size = vma->pgoff + (vma->end - vma->start);
>  
> +	if (vma_entry_is(vma, VMA_AREA_SYSVIPC))
> +		pid = SYSVIPC_SHMEM_PID;
> +
>  	si = shmem_find(vma->shmid);
>  	if (si) {
>  		if (si->size < size) {
> @@ -749,6 +752,8 @@ int cr_dump_shmem(void)
>  	struct shmem_info *si;
>  
>  	for_each_shmem(i, si) {
> +		if (si->pid == SYSVIPC_SHMEM_PID)
> +			continue;
>  		ret = dump_one_shmem(si);
>  		if (ret)
>  			goto out;
> -- 
> 2.5.5
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list