[libvirt] [PATCH] rbd: Use rbd_create3 to create RBD format 2 images by default
Wido den Hollander
wido at widodh.nl
Mon Jan 13 13:05:31 UTC 2014
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 at widodh.nl>
> ---
> 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,
>
More information about the libvir-list
mailing list