summaryrefslogtreecommitdiffstats
path: root/libblkid
diff options
context:
space:
mode:
authorKenneth Van Alstyne2018-12-14 21:27:10 +0100
committerKenneth Van Alstyne2018-12-14 21:27:10 +0100
commitbd301d459fce7d4f7a09e5db1107d3de26bedaa7 (patch)
tree6b30bcf20a58539d38661d1cd417569ce970630a /libblkid
parentMerge branch 'aarch32_on_aarch64' of https://github.com/jlinton/util-linux (diff)
downloadkernel-qcow2-util-linux-bd301d459fce7d4f7a09e5db1107d3de26bedaa7.tar.gz
kernel-qcow2-util-linux-bd301d459fce7d4f7a09e5db1107d3de26bedaa7.tar.xz
kernel-qcow2-util-linux-bd301d459fce7d4f7a09e5db1107d3de26bedaa7.zip
Added support for detecting Ceph BlueStore Block Devices
Diffstat (limited to 'libblkid')
-rw-r--r--libblkid/src/superblocks/bluestore.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/libblkid/src/superblocks/bluestore.c b/libblkid/src/superblocks/bluestore.c
new file mode 100644
index 000000000..24c56f24a
--- /dev/null
+++ b/libblkid/src/superblocks/bluestore.c
@@ -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 }
+ }
+};