2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 22:05:36 +00:00

dedup: Cleanup checking whether we batch punching or not

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Pavel Emelyanov
2014-03-07 14:40:05 +04:00
parent 32a48b67b7
commit fed36de049

View File

@@ -103,15 +103,22 @@ exit:
return 0;
}
static inline bool can_extend_batch(struct iovec *bunch,
unsigned long off, unsigned long len)
{
return /* The next region is the continuation of the existing */
((unsigned long)bunch->iov_base + bunch->iov_len == off) &&
/* The resulting region is non empty and is small enough */
(bunch->iov_len == 0 || bunch->iov_len + len < MAX_BUNCH_SIZE * PAGE_SIZE);
}
int punch_hole(struct page_read *pr, unsigned long off, unsigned long len,
bool cleanup)
{
int ret;
struct iovec * bunch = &pr->bunch;
if ((unsigned long)bunch->iov_base + bunch->iov_len == off && !cleanup
&& (bunch->iov_len + len < MAX_BUNCH_SIZE * PAGE_SIZE
|| bunch->iov_len == 0)) {
if (!cleanup && can_extend_batch(bunch, off, len)) {
pr_debug("pr%d:Extend bunch len from %lx to %lx\n", pr->id,
bunch->iov_len, bunch->iov_len + len);
bunch->iov_len += len;