summaryrefslogtreecommitdiffstats
path: root/libblkid
diff options
context:
space:
mode:
authorSweet Tea Dorminy2017-12-07 00:26:59 +0100
committerKarel Zak2017-12-07 12:11:32 +0100
commit6418cba457a701d44294d934c2bc4b766bbcfa2b (patch)
treef4ec0eb33a1a1e77ab2f7c7727d4868747dd6cfb /libblkid
parenttests: use flock to modify fstab (diff)
downloadkernel-qcow2-util-linux-6418cba457a701d44294d934c2bc4b766bbcfa2b.tar.gz
kernel-qcow2-util-linux-6418cba457a701d44294d934c2bc4b766bbcfa2b.tar.xz
kernel-qcow2-util-linux-6418cba457a701d44294d934c2bc4b766bbcfa2b.zip
libblkid: Add VDO superblock information into blkid
[kzak@redhat.com: - add tests/expected/blkid/low-probe-vdo - enlarge the image (must be > 1024)] Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libblkid')
-rw-r--r--libblkid/src/Makemodule.am1
-rw-r--r--libblkid/src/superblocks/superblocks.c1
-rw-r--r--libblkid/src/superblocks/superblocks.h1
-rw-r--r--libblkid/src/superblocks/vdo.c48
4 files changed, 51 insertions, 0 deletions
diff --git a/libblkid/src/Makemodule.am b/libblkid/src/Makemodule.am
index c126b656c..415c9f408 100644
--- a/libblkid/src/Makemodule.am
+++ b/libblkid/src/Makemodule.am
@@ -90,6 +90,7 @@ libblkid_la_SOURCES = \
libblkid/src/superblocks/ubifs.c \
libblkid/src/superblocks/udf.c \
libblkid/src/superblocks/ufs.c \
+ libblkid/src/superblocks/vdo.c \
libblkid/src/superblocks/vfat.c \
libblkid/src/superblocks/via_raid.c \
libblkid/src/superblocks/vmfs.c \
diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c
index 6bd9efe7d..086003969 100644
--- a/libblkid/src/superblocks/superblocks.c
+++ b/libblkid/src/superblocks/superblocks.c
@@ -113,6 +113,7 @@ static const struct blkid_idinfo *idinfos[] =
&luks_idinfo,
&vmfs_volume_idinfo,
&ubi_idinfo,
+ &vdo_idinfo,
/* Filesystems */
&vfat_idinfo,
diff --git a/libblkid/src/superblocks/superblocks.h b/libblkid/src/superblocks/superblocks.h
index 1a64ba6ec..38f6a8a65 100644
--- a/libblkid/src/superblocks/superblocks.h
+++ b/libblkid/src/superblocks/superblocks.h
@@ -79,6 +79,7 @@ extern const struct blkid_idinfo exfat_idinfo;
extern const struct blkid_idinfo f2fs_idinfo;
extern const struct blkid_idinfo bcache_idinfo;
extern const struct blkid_idinfo mpool_idinfo;
+extern const struct blkid_idinfo vdo_idinfo;
/*
* superblock functions
diff --git a/libblkid/src/superblocks/vdo.c b/libblkid/src/superblocks/vdo.c
new file mode 100644
index 000000000..bec686f4f
--- /dev/null
+++ b/libblkid/src/superblocks/vdo.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This file may be redistributed under the terms of the
+ * GNU Lesser General Public License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <stdint.h>
+
+#include "superblocks.h"
+
+struct vdo_super_block {
+ char magic[8]; /* magic number 'dmvdo001'*/
+ char unused[32]; /* 32 bytes of unimportant space */
+ unsigned char sb_uuid[16]; /* vdo unique id */
+
+ /* this is not all... but enough for libblkid */
+} __attribute__((packed));
+
+static int probe_vdo(blkid_probe pr, const struct blkid_idmag *mag)
+{
+ struct vdo_super_block *vsb;
+
+ vsb = blkid_probe_get_sb(pr, mag, struct vdo_super_block);
+ if (!vsb)
+ return errno ? -errno : 1;
+
+ blkid_probe_set_uuid(pr, vsb->sb_uuid);
+ return 0;
+}
+
+const struct blkid_idinfo vdo_idinfo =
+{
+ .name = "vdo",
+ .usage = BLKID_USAGE_OTHER,
+ .probefunc = probe_vdo,
+ .magics =
+ {
+ { .magic = "dmvdo001", .len = 8 },
+ { NULL }
+ }
+};