From fed36de04920f55cf6c6b97791b2188b1100d81f Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Fri, 7 Mar 2014 14:40:05 +0400 Subject: [PATCH] dedup: Cleanup checking whether we batch punching or not Signed-off-by: Pavel Emelyanov --- cr-dedup.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/cr-dedup.c b/cr-dedup.c index bca07fa0e..7e1428b17 100644 --- a/cr-dedup.c +++ b/cr-dedup.c @@ -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;