From 2f00893227e4e042463c2d72e8413cc62a5dea74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Tue, 21 Jul 2015 18:48:00 +0200 Subject: [PATCH] Feature #1727: Do not allow disk resize for persistent images, and for a smaller size --- src/image/ImagePool.cc | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/image/ImagePool.cc b/src/image/ImagePool.cc index 9b46d9bd49..284fd39d17 100644 --- a/src/image/ImagePool.cc +++ b/src/image/ImagePool.cc @@ -410,6 +410,35 @@ int ImagePool::disk_attribute(int vm_id, DatastorePool * ds_pool = nd.get_dspool(); Datastore * ds; + long long size = 0; + bool has_size = (disk->vector_value("SIZE", size) == 0); + + if (has_size && img->is_persistent() && size != img->get_size()) + { + img->unlock(); + + imagem->release_image(vm_id, iid, false); + + oss << "SIZE attribute is not supported for persistent image [" + << img->get_oid() << "]."; + error_str = oss.str(); + + return -1; + } + + if (has_size && size < img->get_size()) + { + img->unlock(); + + imagem->release_image(vm_id, iid, false); + + oss << "SIZE of " << size << "MB is less than the image [" + << img->get_oid() << "] size of " << img->get_size() << "MB."; + error_str = oss.str(); + + return -1; + } + iid = img->get_oid(); rc = img->disk_attribute(disk, img_type, dev_prefix, inherit_image_attrs); @@ -453,8 +482,7 @@ int ImagePool::disk_attribute(int vm_id, ds->unlock(); } - oss << disk_id; - disk->replace("DISK_ID",oss.str()); + disk->replace("DISK_ID", disk_id); return rc; }