Changes the size of given ploop volume via ploop resize tool.
Signed-off-by: Olga Krishtal <okrishtal(a)virtuozzo.com>
---
src/storage/storage_backend.c | 25 +++++++++++++++++++++++++
src/storage/storage_backend.h | 2 ++
src/storage/storage_backend_fs.c | 2 ++
3 files changed, 29 insertions(+)
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index d109980..fddec3c 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -848,6 +848,31 @@ virStorageBackendCreatePloop(virConnectPtr conn ATTRIBUTE_UNUSED,
return ret;
}
+int
+virStoragePloopResize(virStorageVolDefPtr vol,
+ unsigned long long capacity)
+{
+ int ret = -1;
+ virCommandPtr cmd = NULL;
+ char *resize_tool = NULL;
+
+ resize_tool = virFindFileInPath("ploop");
+ if (!resize_tool) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("unable to find ploop, please install ploop tools"));
+ return -1;
+ }
+ cmd = virCommandNewArgList(resize_tool, "resize", "-s", NULL);
+ virCommandAddArgFormat(cmd, "%lluM", VIR_DIV_UP(capacity, (1024 * 1024)));
+
+ virCommandAddArgFormat(cmd, "%s/DiskDescriptor.xml", vol->target.path);
+
+ ret = virCommandRun(cmd, NULL);
+ virCommandFree(cmd);
+ VIR_FREE(resize_tool);
+ return ret;
+}
+
enum {
QEMU_IMG_BACKING_FORMAT_NONE = 0,
QEMU_IMG_BACKING_FORMAT_FLAG,
diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h
index 852d6ed..73f2bfa 100644
--- a/src/storage/storage_backend.h
+++ b/src/storage/storage_backend.h
@@ -115,6 +115,8 @@ int virStorageBackendCreatePloop(virConnectPtr conn,
virStorageVolDefPtr inputvol,
unsigned int flags);
+int virStoragePloopResize(virStorageVolDefPtr vol,
+ unsigned long long capacity);
virStorageBackendBuildVolFrom
virStorageBackendGetBuildVolFromFunction(virStorageVolDefPtr vol,
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index 77c94c9..eae2b2e 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -1379,6 +1379,8 @@ virStorageBackendFileSystemVolResize(virConnectPtr conn
ATTRIBUTE_UNUSED,
if (vol->target.format == VIR_STORAGE_FILE_RAW) {
return virStorageFileResize(vol->target.path, capacity,
vol->target.allocation, pre_allocate);
+ } else if (vol->target.format == VIR_STORAGE_FILE_PLOOP) {
+ return virStoragePloopResize(vol, capacity);
} else {
if (pre_allocate) {
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
--
1.8.3.1