mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
When we are doing pre-dump, we splice pages in pipes and only then open images and dump pages. But when we are splicing pages, we need to know about existence of parent images. This patch adds a new call to determin existence of parent images. In addition this patch fixes a following issue: CID 83244 (#1 of 1): Uninitialized pointer read (UNINIT) 14. uninit_use: Using uninitialized value xfer.parent. v2: initialize unused field of struct page_server_iov, because it sends in network. CID 83451 (#1 of 1): Uninitialized scalar variable (UNINIT) 2. uninit_use_in_call: Using uninitialized value pi. Field pi.nr_pages is uninitialized when calling write. Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
#ifndef __CR_PAGE_XFER__H__
|
|
#define __CR_PAGE_XFER__H__
|
|
#include "page-read.h"
|
|
|
|
extern int cr_page_server(bool daemon_mode, int cfd);
|
|
|
|
/*
|
|
* page_xfer -- transfer pages into image file.
|
|
* Two images backends are implemented -- local image file
|
|
* and page-server image file.
|
|
*/
|
|
|
|
struct page_xfer {
|
|
/* transfers one vaddr:len entry */
|
|
int (*write_pagemap)(struct page_xfer *self, struct iovec *iov);
|
|
/* transfers pages related to previous pagemap */
|
|
int (*write_pages)(struct page_xfer *self, int pipe, unsigned long len);
|
|
/* transfers one hole -- vaddr:len entry w/o pages */
|
|
int (*write_hole)(struct page_xfer *self, struct iovec *iov);
|
|
void (*close)(struct page_xfer *self);
|
|
|
|
/* private data for every page-xfer engine */
|
|
union {
|
|
struct /* local */ {
|
|
struct cr_img *pmi; /* pagemaps */
|
|
struct cr_img *pi; /* pages */
|
|
};
|
|
|
|
struct /* page-server */ {
|
|
int sk;
|
|
u64 dst_id;
|
|
};
|
|
};
|
|
|
|
struct page_read *parent;
|
|
};
|
|
|
|
extern int open_page_xfer(struct page_xfer *xfer, int fd_type, long id);
|
|
struct page_pipe;
|
|
extern int page_xfer_dump_pages(struct page_xfer *, struct page_pipe *,
|
|
unsigned long off);
|
|
extern int connect_to_page_server(void);
|
|
extern int disconnect_from_page_server(void);
|
|
|
|
extern int check_parent_page_xfer(int fd_type, long id);
|
|
|
|
#endif /* __CR_PAGE_XFER__H__ */
|