Commit fed36de0 authored by Pavel Emelyanov's avatar Pavel Emelyanov

dedup: Cleanup checking whether we batch punching or not

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 32a48b67
...@@ -103,15 +103,22 @@ exit: ...@@ -103,15 +103,22 @@ exit:
return 0; 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, int punch_hole(struct page_read *pr, unsigned long off, unsigned long len,
bool cleanup) bool cleanup)
{ {
int ret; int ret;
struct iovec * bunch = &pr->bunch; struct iovec * bunch = &pr->bunch;
if ((unsigned long)bunch->iov_base + bunch->iov_len == off && !cleanup if (!cleanup && can_extend_batch(bunch, off, len)) {
&& (bunch->iov_len + len < MAX_BUNCH_SIZE * PAGE_SIZE
|| bunch->iov_len == 0)) {
pr_debug("pr%d:Extend bunch len from %lx to %lx\n", pr->id, pr_debug("pr%d:Extend bunch len from %lx to %lx\n", pr->id,
bunch->iov_len, bunch->iov_len + len); bunch->iov_len, bunch->iov_len + len);
bunch->iov_len += len; bunch->iov_len += len;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment