Re: [PATCH] rbd: Use rbd_create3 to create RBD format 2 images by default

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/11/2013 03:47 PM, Wido den Hollander wrote:
This new RBD format supports snapshotting and cloning. By having
libvirt create images in format 2 end-users of the created images
can benefit of the new RBD format.

Older versions of libvirt can work with this new RBD format as long
as librbd supports format 2, something that all recent versions of
librbd do.


Could somebody take a look at this patch? We would really like to see this in libvirt so it can make it's way into the Linux distributions.

Wido

Signed-off-by: Wido den Hollander <wido@xxxxxxxxx>
---
  src/storage/storage_backend_rbd.c |   23 +++++++++++++++++++++--
  1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c
index 4b6f18c..f3dd7a0 100644
--- a/src/storage/storage_backend_rbd.c
+++ b/src/storage/storage_backend_rbd.c
@@ -435,6 +435,26 @@ cleanup:
      return ret;
  }

+static int virStorageBackendRBDCreateImage(rados_ioctx_t io,
+                                           char *name, long capacity)
+{
+    int order = 0;
+    #if LIBRBD_VERSION_CODE > 260
+    uint64_t features = 3;
+    uint64_t stripe_count = 1;
+    uint64_t stripe_unit = 4194304;
+
+    if (rbd_create3(io, name, capacity, features, &order,
+                    stripe_count, stripe_unit) < 0) {
+    #else
+    if (rbd_create(io, name, capacity, &order) < 0) {
+    #endif
+        return -1;
+    }
+
+    return 0;
+}
+
  static int virStorageBackendRBDCreateVol(virConnectPtr conn,
                                           virStoragePoolObjPtr pool,
                                           virStorageVolDefPtr vol)
@@ -442,7 +462,6 @@ static int virStorageBackendRBDCreateVol(virConnectPtr conn,
      virStorageBackendRBDState ptr;
      ptr.cluster = NULL;
      ptr.ioctx = NULL;
-    int order = 0;
      int ret = -1;

      VIR_DEBUG("Creating RBD image %s/%s with size %llu",
@@ -467,7 +486,7 @@ static int virStorageBackendRBDCreateVol(virConnectPtr conn,
          goto cleanup;
      }

-    if (rbd_create(ptr.ioctx, vol->name, vol->capacity, &order) < 0) {
+    if (virStorageBackendRBDCreateImage(ptr.ioctx, vol->name, vol->capacity) < 0) {
          virReportError(VIR_ERR_INTERNAL_ERROR,
                         _("failed to create volume '%s/%s'"),
                         pool->def->source.name,


--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]