mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-03 15:55:53 +00:00
v2 deduplication: add separate function for punch to use on restore
Signed-off-by: Tikhomirov Pavel <snorcht@gmail.com> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
committed by
Pavel Emelyanov
parent
9b491e5c68
commit
a355affd29
24
cr-dedup.c
24
cr-dedup.c
@@ -101,6 +101,19 @@ exit:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int punch_hole(int fd, unsigned long off, unsigned long len)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
pr_debug("Punch!/%lu/%lu/\n", off, len);
|
||||||
|
ret = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
|
||||||
|
off, len);
|
||||||
|
if (ret != 0) {
|
||||||
|
pr_perror("Error punching hole");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int dedup_one_iovec(struct page_read *pr, struct iovec *iov)
|
int dedup_one_iovec(struct page_read *pr, struct iovec *iov)
|
||||||
{
|
{
|
||||||
unsigned long off;
|
unsigned long off;
|
||||||
@@ -133,14 +146,11 @@ int dedup_one_iovec(struct page_read *pr, struct iovec *iov)
|
|||||||
piov_end = (unsigned long)piov.iov_base + piov.iov_len;
|
piov_end = (unsigned long)piov.iov_base + piov.iov_len;
|
||||||
off_real = lseek(pr->fd_pg, 0, SEEK_CUR);
|
off_real = lseek(pr->fd_pg, 0, SEEK_CUR);
|
||||||
if (!pr->pe->in_parent) {
|
if (!pr->pe->in_parent) {
|
||||||
pr_debug("Punch!/%lu/%lu/\n", off_real, min(piov_end, iov_end) - off);
|
ret = punch_hole(pr->fd_pg, off_real, min(piov_end, iov_end) - off);
|
||||||
ret = fallocate(pr->fd_pg, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
|
if (ret == -1)
|
||||||
off_real, min(piov_end, iov_end) - off);
|
return ret;
|
||||||
if (ret != 0) {
|
|
||||||
pr_perror("Error punching hole : %d", errno);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prp = pr->parent;
|
prp = pr->parent;
|
||||||
if (prp) {
|
if (prp) {
|
||||||
/* recursively */
|
/* recursively */
|
||||||
|
@@ -73,4 +73,5 @@ extern void pagemap2iovec(PagemapEntry *pe, struct iovec *iov);
|
|||||||
extern int seek_pagemap_page(struct page_read *pr, unsigned long vaddr, bool warn);
|
extern int seek_pagemap_page(struct page_read *pr, unsigned long vaddr, bool warn);
|
||||||
|
|
||||||
extern int dedup_one_iovec(struct page_read *pr, struct iovec *iov);
|
extern int dedup_one_iovec(struct page_read *pr, struct iovec *iov);
|
||||||
|
extern int punch_hole(int fd, unsigned long off, unsigned long len);
|
||||||
#endif /* __CR_PAGE_READ_H__ */
|
#endif /* __CR_PAGE_READ_H__ */
|
||||||
|
Reference in New Issue
Block a user