[Devel] [PATCH hci-8.1 1/3] dm-ploop: fix freeing the wrong clusters when a BAT writeback fails
Denis V. Lunev
den at openvz.org
Tue Oct 27 19:32:57 MSK 2026
From: Denis V. Lunev <den at openvz.org>
When an index writeback fails, ploop_advance_local_after_bat_wb()
gives the clusters it allocated back to holes_bitmap. It passes
i + off, the virtual cluster number, to ploop_hole_set_bit(). Since
"dm-ploop: make new allocations immediately visible in BAT" it does
so for every mapped entry of the page, including the ones copied from
the local BAT that this writeback did not change.
This marks as free image clusters that are still in use: data
clusters of other virtual clusters, and also the clusters holding the
header and the BAT, since small virtual cluster numbers fall there.
Later allocations hand them out again, so a guest write can land on
live data or on the BAT, while the clusters really allocated for the
failed writeback stay leaked.
Free the image cluster the entry points to, and only for entries this
writeback changed: those differing from the local BAT, and those the
local BAT maps from a lower delta, which a COW replaced.
Fixes: 6ddad5a4d226 ("dm-ploop: Add ploop target driver")
https://virtuozzo.atlassian.net/browse/VSTOR-151979
Signed-off-by: Denis V. Lunev <den at openvz.org>
Feature: dm-ploop: ploop target driver
---
drivers/md/dm-ploop-map.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c
index 48466435dd19..34bf6487107f 100644
--- a/drivers/md/dm-ploop-map.c
+++ b/drivers/md/dm-ploop-map.c
@@ -868,8 +868,9 @@ static void ploop_advance_local_after_bat_wb(struct ploop *ploop,
if (success) {
WRITE_ONCE(bat_entries[i], READ_ONCE(dst_clu[i]));
WRITE_ONCE(md->bat_levels[i], ploop_top_level(ploop));
- } else {
- ploop_hole_set_bit(i + off, ploop);
+ } else if (dst_clu[i] != bat_entries[i] ||
+ md->bat_levels[i] < ploop_top_level(ploop)) {
+ ploop_hole_set_bit(dst_clu[i], ploop);
}
}
#ifdef PLOOP_DELAYWB
--
2.53.0
More information about the Devel
mailing list