[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