mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-22 09:58:09 +00:00
Here is a problem with ghost files. Links are created on restore, but they can't be created on any mount point, because a mount point can be non-root bind-mount of another one. So we need to find the root mount and create all links there. v2: clean up v3: add optimization for the case when both links on the same mount point. v4: don't look up mount points by mnt_id in a second time. Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
#ifndef __CR_FILES_REG_H__
|
|
#define __CR_FILES_REG_H__
|
|
|
|
#include "asm/types.h"
|
|
#include "files.h"
|
|
#include "image.h"
|
|
|
|
#include "protobuf/regfile.pb-c.h"
|
|
#include "protobuf/ghost-file.pb-c.h"
|
|
|
|
struct cr_fdset;
|
|
struct fd_parms;
|
|
|
|
struct file_remap {
|
|
char *path;
|
|
bool is_dir;
|
|
int mnt_id;
|
|
unsigned int users;
|
|
};
|
|
|
|
struct reg_file_info {
|
|
struct file_desc d;
|
|
RegFileEntry *rfe;
|
|
struct file_remap *remap;
|
|
bool size_checked;
|
|
char *path;
|
|
};
|
|
|
|
extern int open_reg_by_id(u32 id);
|
|
extern int open_reg_fd(struct file_desc *);
|
|
extern int open_path(struct file_desc *, int (*open_cb)(int ns_root_fd,
|
|
struct reg_file_info *, void *), void *arg);
|
|
extern void clear_ghost_files(void);
|
|
|
|
extern int prepare_shared_reg_files(void);
|
|
|
|
extern const struct fdtype_ops regfile_dump_ops;
|
|
extern int dump_one_reg_file(int lfd, u32 id, const struct fd_parms *p);
|
|
|
|
extern struct file_remap *lookup_ghost_remap(u32 dev, u32 ino);
|
|
extern void remap_put(struct file_remap *remap);
|
|
extern struct file_desc *collect_special_file(u32 id);
|
|
|
|
extern struct collect_image_info reg_file_cinfo;
|
|
extern struct collect_image_info remap_cinfo;
|
|
|
|
extern void delete_link_remaps(void);
|
|
extern void free_link_remaps(void);
|
|
|
|
#endif /* __CR_FILES_REG_H__ */
|