[Devel] [PATCH hci-8.1 v2 3/3] dm-ploop: fix the flip_upper_deltas check skipping the last BAT entry

Denis V. Lunev den at openvz.org
Thu Nov 5 17:57:49 MSK 2026


From: Denis V. Lunev <den at openvz.org>

ploop_check_delta_before_flip() means to stop its walk after the BAT
page that holds entry nr_be - 1 of the lower delta. It takes the last
entry of the page from i after the scan, when i is already end + 1.

When entry nr_be - 1 is the first one of its page (nr_be = 1009, for
example), the test matches on the full page before it, and the walk
stops one page early: a cluster both deltas map at entry nr_be - 1 gets
past the check. Otherwise the test never matches and the walk ends
with the live BAT, which the previous patch keeps the same size as the
BAT of the lower delta.

Take the last entry of the page from end, and leave the loop with a
plain break.

Fixes: 6ddad5a4d226 ("dm-ploop: Add ploop target driver")
https://virtuozzo.atlassian.net/browse/VSTOR-153445
Feature: dm-ploop: ploop target driver
Signed-off-by: Denis V. Lunev <den at openvz.org>
---
 drivers/md/dm-ploop-cmd.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index 5549ba448594..2d1fa449b052 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -1161,13 +1161,8 @@ static int ploop_check_delta_before_flip(struct ploop *ploop, struct file *file)
 		if (stop)
 			break;
 
-		clu = ploop_page_clu_idx_to_bat_clu(md->id, i);
-		if (clu == nr_be - 1) {
-			stop = true;
-			goto unmap;
-		}
-unmap:
-		if (stop)
+		clu = ploop_page_clu_idx_to_bat_clu(md->id, end);
+		if (clu == nr_be - 1)
 			break;
 		d_md = ploop_md_next_entry(d_md);
 	}
-- 
2.53.0



More information about the Devel mailing list