[Devel] [PATCH ploop] discard/defrag: take into account image size change caused by defrag
Andrey Ryabinin
aryabinin at virtuozzo.com
Wed Apr 20 09:18:52 PDT 2016
Defragmentation may increase size of ploop image. In that case,
'ploop-discard --defrag --to-free X' command will not give us expected
result, because delta added by defrag won't be taken into account.
This patch calculates such change of image size and adds it to 'to_free'
parameter so it we will discarded later.
https://jira.sw.ru/browse/PSBM-42548
https://jira.sw.ru/browse/PSBM-45364
Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
---
lib/balloon.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/lib/balloon.c b/lib/balloon.c
index 6346f7c..612a6bd 100644
--- a/lib/balloon.c
+++ b/lib/balloon.c
@@ -1343,9 +1343,26 @@ int ploop_discard(struct ploop_disk_images_data *di,
ploop_unlock_dd(di);
if (param->defrag) {
+ struct ploop_discard_stat pds, pds_after;
+
+ ret = ploop_discard_get_stat_by_dev(dev, mnt, &pds);
+ if (ret)
+ goto out;
+
ret = ploop_defrag(di, dev, mnt);
if (ret)
goto out;
+
+ ret = ploop_discard_get_stat_by_dev(dev, mnt, &pds_after);
+ if (ret)
+ goto out;
+
+ /*
+ * Take into account possible change of ploop image size caused
+ * by defrag operation defrag operation.
+ */
+ if (param->to_free)
+ param->to_free += pds_after.image_size - pds.image_size;
}
ret = do_ploop_discard(di, dev, mnt, param->minlen_b,
--
2.7.3
More information about the Devel
mailing list