Commit ad32e9c0 authored by Josh Durgin's avatar Josh Durgin Committed by Kevin Wolf
Browse files

rbd: use the higher level librbd instead of just librados



librbd stacks on top of librados to provide access
to rbd images.

Using librbd simplifies the qemu code, and allows
qemu to use new versions of the rbd format
with few (if any) changes.

Reviewed-by: default avatarChristian Brunner <chb@muc.de>
Signed-off-by: default avatarJosh Durgin <josh.durgin@dreamhost.com>
Signed-off-by: default avatarYehuda Sadeh <yehuda@hq.newdream.net>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
parent d1f6fd8d
Loading
Loading
Loading
Loading
+218 −577

File changed.

Preview size limit exceeded, changes collapsed.

block/rbd_types.h

deleted100644 → 0
+0 −71
Original line number Diff line number Diff line
/*
 * Ceph - scalable distributed file system
 *
 * Copyright (C) 2004-2010 Sage Weil <sage@newdream.net>
 *
 * This is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1, as published by the Free Software
 * Foundation.  See file COPYING.LIB.
 *
 */

#ifndef CEPH_RBD_TYPES_H
#define CEPH_RBD_TYPES_H


/*
 * rbd image 'foo' consists of objects
 *   foo.rbd      - image metadata
 *   foo.00000000
 *   foo.00000001
 *   ...          - data
 */

#define RBD_SUFFIX              ".rbd"
#define RBD_DIRECTORY           "rbd_directory"
#define RBD_INFO                "rbd_info"

#define RBD_DEFAULT_OBJ_ORDER   22   /* 4MB */

#define RBD_MAX_OBJ_NAME_SIZE   96
#define RBD_MAX_BLOCK_NAME_SIZE 24
#define RBD_MAX_SEG_NAME_SIZE   128

#define RBD_COMP_NONE           0
#define RBD_CRYPT_NONE          0

#define RBD_HEADER_TEXT         "<<< Rados Block Device Image >>>\n"
#define RBD_HEADER_SIGNATURE    "RBD"
#define RBD_HEADER_VERSION      "001.005"

struct rbd_info {
    uint64_t max_id;
} __attribute__ ((packed));

struct rbd_obj_snap_ondisk {
    uint64_t id;
    uint64_t image_size;
} __attribute__((packed));

struct rbd_obj_header_ondisk {
    char text[40];
    char block_name[RBD_MAX_BLOCK_NAME_SIZE];
    char signature[4];
    char version[8];
    struct {
        uint8_t order;
        uint8_t crypt_type;
        uint8_t comp_type;
        uint8_t unused;
    } __attribute__((packed)) options;
    uint64_t image_size;
    uint64_t snap_seq;
    uint32_t snap_count;
    uint32_t reserved;
    uint64_t snap_names_len;
    struct rbd_obj_snap_ondisk snaps[0];
} __attribute__((packed));


#endif
+8 −25
Original line number Diff line number Diff line
@@ -1917,41 +1917,24 @@ fi
if test "$rbd" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <rados/librados.h>
int main(void) { rados_initialize(0, NULL); return 0; }
EOF
  rbd_libs="-lrados"
  if compile_prog "" "$rbd_libs" ; then
    librados_too_old=no
    cat > $TMPC <<EOF
#include <stdio.h>
#include <rados/librados.h>
#ifndef CEPH_OSD_TMAP_SET
#error missing CEPH_OSD_TMAP_SET
#endif
#include <rbd/librbd.h>
int main(void) {
    int (*func)(const rados_pool_t pool, uint64_t *snapid) = rados_selfmanaged_snap_create;
    rados_initialize(0, NULL);
    rados_t cluster;
    rados_create(&cluster, NULL);
    return 0;
}
EOF
  rbd_libs="-lrbd -lrados"
  if compile_prog "" "$rbd_libs" ; then
    rbd=yes
    libs_tools="$rbd_libs $libs_tools"
    libs_softmmu="$rbd_libs $libs_softmmu"
    else
      rbd=no
      librados_too_old=yes
    fi
  else
    if test "$rbd" = "yes" ; then
      feature_not_found "rados block device"
    fi
    rbd=no
  fi
  if test "$librados_too_old" = "yes" ; then
    echo "-> Your librados version is too old - upgrade needed to have rbd support"
  fi
fi

##########################################