[Ocfs2-devel] [PATCH] Adding ocfs support to blkid

Rusty Lynch rusty at linux.co.intel.com
Wed Feb 4 16:31:18 CST 2004


On Wed, Feb 04, 2004 at 03:31:49PM -0800, Manish Singh wrote:
> On Wed, Feb 04, 2004 at 10:59:52AM -0800, Mark Fasheh wrote:
> > Could we call it "ocfs" instead of "ocfs2" below? We will likely be bumping
> > up the version number in the header for ocfs version 2 when it's released.
> 
> Yeah, call it "ocfs" and set SEC_TYPE to "ocfs1", "ocfs2", and "ntocfs"
> for version 1, version 2, and windows ocfs, respectively. For ocfs1 the
> major version is 1, ocfs2 is 2, and ntocfs it's >= 9.

Ok, here is a version that adds SEC_TYPE as is described above.  An example output is:

[rusty at penguin e2fsprogs]$ sudo ./misc/blkid -c /dev/null /dev/sda1
/dev/sda1: SEC_TYPE="ocfs1" LABEL="FirwireDisk" MOUNT="/oracle" UUID="b88f9d35-d2f5-ffc2-350d-f627cfeb7242" TYPE="ocfs"

Here is the patch...

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/02/04 16:18:29-08:00 rusty at penguin.co.intel.com 
#   Adding SEC_TYPE for ocfs
# 
# lib/blkid/probe.h
#   2004/02/04 16:18:29-08:00 rusty at penguin.co.intel.com +4 -0
#   Adding SEC_TYPE for ocfs
# 
# lib/blkid/probe.c
#   2004/02/04 16:18:29-08:00 rusty at penguin.co.intel.com +10 -1
#   Adding SEC_TYPE for ocfs
# 
# ChangeSet
#   2004/02/04 11:15:08-08:00 rusty at penguin.co.intel.com 
#   Changing name of file system from ocfs2 to ocfs
# 
# lib/blkid/probe.c
#   2004/02/04 11:15:07-08:00 rusty at penguin.co.intel.com +1 -1
#   Changing name of file system from ocfs2 to ocfs
# 
# ChangeSet
#   2004/02/04 00:14:40-08:00 rusty at penguin.co.intel.com 
#   Adding support for the Oracle cluster file system (ocfs)
# 
# BitKeeper/etc/logging_ok
#   2004/02/04 00:14:40-08:00 rusty at penguin.co.intel.com +2 -1
#   Logging to logging at openlogging.org accepted
# 
# lib/blkid/probe.h
#   2004/02/04 00:14:24-08:00 rusty at penguin.co.intel.com +21 -0
#   Adding support for the Oracle cluster file system (ocfs)
# 
# lib/blkid/probe.c
#   2004/02/04 00:14:24-08:00 rusty at penguin.co.intel.com +31 -0
#   Adding support for the Oracle cluster file system (ocfs)
# 
diff -Nru a/lib/blkid/probe.c b/lib/blkid/probe.c
--- a/lib/blkid/probe.c	Wed Feb  4 16:19:40 2004
+++ b/lib/blkid/probe.c	Wed Feb  4 16:19:40 2004
@@ -312,6 +312,45 @@
 	return 1;
 }
 
+static int probe_ocfs(int fd __BLKID_ATTR((unused)), 
+		      blkid_cache cache __BLKID_ATTR((unused)), 
+		      blkid_dev dev,
+		      struct blkid_magic *id __BLKID_ATTR((unused)), 
+		      unsigned char *buf)
+{
+	struct ocfs_volume_header ovh;
+	struct ocfs_volume_label ovl;
+	uint major;
+
+	if (lseek(fd, 0, SEEK_SET) != 0)
+		return -1;
+
+	if (read(fd, (char *) &ovh, sizeof(ovh)) != sizeof(ovh))
+		return -1;
+
+	if (strncmp(ovh.signature, OCFS_MAGIC, sizeof(OCFS_MAGIC)) != 0)
+		return -1;
+
+	if (lseek(fd, 512, SEEK_SET) != 512)
+		return -1;
+
+	if (read(fd, (char *) &ovl, sizeof(ovl)) != sizeof(ovl)) 
+		return -1;
+
+	major = ocfsmajor(ovh);
+	if (major == 1)
+		blkid_set_tag(dev,"SEC_TYPE","ocfs1",sizeof("ocfs1"));
+	else if (major == 2)
+		blkid_set_tag(dev,"SEC_TYPE","ocfs2",sizeof("ocfs2"));
+	else if (major >= 9)
+		blkid_set_tag(dev,"SEC_TYPE","ntocfs",sizeof("ntocfs"));
+	
+	blkid_set_tag(dev, "LABEL", ovl.label, ocfslabellen(ovl));
+	blkid_set_tag(dev, "MOUNT", ovh.mount, ocfsmountlen(ovh));
+	set_uuid(dev, ovl.vol_id);
+	return 0;
+}
+
 /*
  * BLKID_BLK_OFFS is at least as large as the highest bim_kboff defined
  * in the type_array table below + bim_kbalign.
@@ -371,6 +410,7 @@
   { "swap",	 0, 0x1ff6, 10, "SWAPSPACE2",		0 },
   { "swap",	 0, 0x3ff6, 10, "SWAP-SPACE",		0 },
   { "swap",	 0, 0x3ff6, 10, "SWAPSPACE2",		0 },
+  { "ocfs",	 0,	 8,  9,	 "OracleCFS",  probe_ocfs },
   {   NULL,	 0,	 0,  0, NULL,			NULL }
 };
 
diff -Nru a/lib/blkid/probe.h b/lib/blkid/probe.h
--- a/lib/blkid/probe.h	Wed Feb  4 16:19:40 2004
+++ b/lib/blkid/probe.h	Wed Feb  4 16:19:40 2004
@@ -209,6 +209,31 @@
 	__u32	h_blksize;
 };
 
+struct ocfs_volume_header {
+	u_char	minor_version[4];
+	u_char	major_version[4];
+	u_char	signature[128];
+	u_char  mount[128];
+	u_char  mount_len[2];
+};
+
+struct ocfs_volume_label {
+	u_char	disk_lock[48];
+	u_char	label[64];	
+	u_char	label_len[2];
+	u_char  vol_id[16];
+	u_char  vol_id_len[2];
+};
+
+#define ocfsmajor(o) ((uint)o.major_version[0] \
+                   + (((uint) o.major_version[1]) << 8) \
+                   + (((uint) o.major_version[2]) << 16) \
+                   + (((uint) o.major_version[3]) << 24))
+#define ocfslabellen(o)	((uint)o.label_len[0] + (((uint) o.label_len[1]) << 8))
+#define ocfsmountlen(o)	((uint)o.mount_len[0] + (((uint) o.mount_len[1])<<8))
+
+#define OCFS_MAGIC "OracleCFS"
+
 #define ISODCL(from, to) (to - from + 1)
 struct iso_volume_descriptor {
 	char type[ISODCL(1,1)]; /* 711 */


More information about the Ocfs2-devel mailing list