]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
Added support for detecting Ceph BlueStore Block Devices
authorKenneth Van Alstyne <kvanalstyne@knightpoint.com>
Fri, 14 Dec 2018 20:27:10 +0000 (14:27 -0600)
committerKenneth Van Alstyne <kvanalstyne@knightpoint.com>
Fri, 14 Dec 2018 20:27:10 +0000 (14:27 -0600)
libblkid/src/superblocks/bluestore.c [new file with mode: 0644]

diff --git a/libblkid/src/superblocks/bluestore.c b/libblkid/src/superblocks/bluestore.c
new file mode 100644 (file)
index 0000000..24c56f2
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2018 by Kenneth Van Alstyne <kvanals@kvanals.org>
+ *
+ * This file may be redistributed under the terms of the
+ * GNU Lesser General Public License.
+ *
+ *
+ * Ceph BlueStore is one of the supported storage
+ * methods for Object Storage Devices (OSDs).  
+ * This is used to detect the backing block devices
+ * used for these types of OSDs in a Ceph Cluster.
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <inttypes.h>
+#include <stddef.h>
+
+#include "bitops.h"
+#include "superblocks.h"
+
+#define BLUESTORE_MAGIC_L              22
+
+struct bluestore_phdr {
+       uint8_t         magic[BLUESTORE_MAGIC_L];
+       uint32_t        version;
+} __attribute__((packed));
+
+static int probe_bluestore(blkid_probe pr, const struct blkid_idmag *mag)
+{
+       struct bluestore_phdr *header;
+
+       header = blkid_probe_get_sb(pr, mag, struct bluestore_phdr);
+       if (header == NULL)
+               return errno ? -errno : 1;
+
+       blkid_probe_sprintf_version(pr, "%u", le32_to_cpu(header->version));
+       return 0;
+}
+
+const struct blkid_idinfo bluestore_idinfo =
+{
+       .name           = "ceph_bluestore",
+       .usage          = BLKID_USAGE_OTHER,
+       .probefunc      = probe_bluestore,
+       .magics         =
+       {
+               { .magic = "bluestore block device", .len = 22 }
+       }
+};