criu/include/page-xfer.h
Andrey Vagin 71a0b5dc31 mem: check existence of parent images before dumping pages (v2)
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>
2014-11-29 19:32:40 +03:00

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__ */