[klibc] [patch] Add LVM2 detection to fstype
David Härdeman
david at 2gen.com
Wed Mar 22 15:56:37 PST 2006
The attached patch adds the ability to fstype to detect lvm2 physical
volumes (PV's).
Signed-off-by: David Härdeman <david at 2gen.com>
-------------- next part --------------
diff -Nur klibc-orig/usr/kinit/fstype/fstype.c klibc/usr/kinit/fstype/fstype.c
--- klibc-orig/usr/kinit/fstype/fstype.c 2006-03-22 21:28:31.000000000 +0100
+++ klibc/usr/kinit/fstype/fstype.c 2006-03-23 00:54:57.000000000 +0100
@@ -7,7 +7,7 @@
* FSSIZE - filesystem size (if known)
*
* We currently detect (in order):
- * gzip, cramfs, romfs, xfs, luks, minix, ext3, ext2, reiserfs, jfs, swap
+ * gzip, cramfs, romfs, xfs, luks, lvm2, minix, ext3, ext2, reiserfs, jfs, swap
*
* MINIX, ext3 and Reiserfs bits are currently untested.
*/
@@ -30,6 +30,7 @@
#include "ext3_fs.h"
#include "xfs_sb.h"
#include "luks_fs.h"
+#include "lvm2_sb.h"
/*
* Slightly cleaned up version of jfs_superblock to
@@ -202,6 +203,26 @@
return 0;
}
+static int lvm2_image(const void *buf, unsigned long long *blocks)
+{
+ const struct lvm2_super_block *lsb;
+ int i;
+
+ /* We must check every 512 byte sector */
+ for (i = 0; i < BLOCK_SIZE; i += 0x200) {
+ lsb = (const struct lvm2_super_block *)(buf + i);
+
+ if (!memcmp(lsb->magic, LVM2_MAGIC, LVM2_MAGIC_L) &&
+ !memcmp(lsb->type, LVM2_TYPE, LVM2_TYPE_L)) {
+ /* This is just one of possibly many PV's */
+ *blocks = 0;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
struct imagetype {
off_t block;
const char name[12];
@@ -214,6 +235,8 @@
{ 0, "romfs", romfs_image },
{ 0, "xfs", xfs_image },
{ 0, "luks", luks_image },
+ { 0, "lvm2", lvm2_image },
+ { 1, "lvm2", lvm2_image },
{ 1, "minix", minix_image },
{ 1, "ext3", ext3_image },
{ 1, "ext2", ext2_image },
diff -Nur klibc-orig/usr/kinit/fstype/lvm2_sb.h klibc/usr/kinit/fstype/lvm2_sb.h
--- klibc-orig/usr/kinit/fstype/lvm2_sb.h 1970-01-01 01:00:00.000000000 +0100
+++ klibc/usr/kinit/fstype/lvm2_sb.h 2006-03-23 00:46:21.000000000 +0100
@@ -0,0 +1,18 @@
+#ifndef __LVM2_SB_H
+#define __LVM2_SB_H
+
+/* LVM2 super block definitions */
+#define LVM2_MAGIC_L 8
+#define LVM2_MAGIC "LABELONE"
+#define LVM2_TYPE_L 8
+#define LVM2_TYPE "LVM2 001"
+
+struct lvm2_super_block {
+ char magic[LVM2_MAGIC_L];
+ __be64 sector;
+ __be32 crc;
+ __be32 offset;
+ char type[LVM2_TYPE_L];
+};
+
+#endif
More information about the klibc
mailing list