[Ocfs2-tools-commits] mfasheh commits r550 - in trunk/libocfs2: . include

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Thu Jan 13 13:15:00 CST 2005


Author: mfasheh
Date: 2005-01-13 13:14:58 -0600 (Thu, 13 Jan 2005)
New Revision: 550

Modified:
   trunk/libocfs2/chain.c
   trunk/libocfs2/dirblock.c
   trunk/libocfs2/extents.c
   trunk/libocfs2/include/ocfs2.h
   trunk/libocfs2/inode.c
   trunk/libocfs2/openfs.c
Log:
* update libocfs2 to swap endianness on the same fields that the module
  does.
 
* ocfs2_read_dir_block thought that the minimum record size was '8' -- this 
  is actually '12' as ocfs2 has 64 bit inode numbers. fix this.

* ocfs2_write_block suffered from the same problem, fixed.



Modified: trunk/libocfs2/chain.c
===================================================================
--- trunk/libocfs2/chain.c	2005-01-12 23:53:51 UTC (rev 549)
+++ trunk/libocfs2/chain.c	2005-01-13 19:14:58 UTC (rev 550)
@@ -29,7 +29,16 @@
 
 #include "ocfs2.h"
 
+static void ocfs2_group_desc_to_cpu(ocfs2_group_desc *gd)
+{
+	gd->bg_generation = le32_to_cpu(gd->bg_generation);
+}
 
+static void ocfs2_group_desc_to_le(ocfs2_group_desc *gd)
+{
+	gd->bg_generation = cpu_to_le32(gd->bg_generation);
+}
+
 errcode_t ocfs2_read_group_desc(ocfs2_filesys *fs, uint64_t blkno,
 				char *gd_buf)
 {
@@ -56,10 +65,11 @@
 		   strlen(OCFS2_GROUP_DESC_SIGNATURE)))
 		goto out;
 
-	/* FIXME swap block */
-
 	memcpy(gd_buf, blk, fs->fs_blocksize);
 
+	gd = (ocfs2_group_desc *)gd_buf;
+	ocfs2_group_desc_to_cpu(gd);
+
 	ret = 0;
 out:
 	ocfs2_free(&blk);
@@ -72,6 +82,7 @@
 {
 	errcode_t ret;
 	char *blk;
+	ocfs2_group_desc *gd;
 
 	if (!(fs->fs_flags & OCFS2_FLAG_RW))
 		return OCFS2_ET_RO_FILESYS;
@@ -84,10 +95,11 @@
 	if (ret)
 		return ret;
 
-	/* FIXME Swap block */
-
 	memcpy(blk, gd_buf, fs->fs_blocksize);
 
+	gd = (ocfs2_group_desc *)blk;
+	ocfs2_group_desc_to_le(gd);
+
 	ret = io_write_block(fs->fs_io, blkno, 1, blk);
 	if (ret)
 		goto out;

Modified: trunk/libocfs2/dirblock.c
===================================================================
--- trunk/libocfs2/dirblock.c	2005-01-12 23:53:51 UTC (rev 549)
+++ trunk/libocfs2/dirblock.c	2005-01-13 19:14:58 UTC (rev 550)
@@ -40,36 +40,29 @@
 	char		*p, *end;
 	struct ocfs2_dir_entry *dirent;
 	unsigned int	name_len, rec_len;
-#ifdef OCFS2_ENABLE_SWAPFS
-	unsigned int	do_swap;
-#endif
-	
 
  	retval = io_read_block(fs->fs_io, block, 1, buf);
 	if (retval)
 		return retval;
-#ifdef OCFS2_ENABLE_SWAPFS
-	do_swap = (fs->fs_flags & (OCFS2_FLAG_SWAP_BYTES|
-				OCFS2_FLAG_SWAP_BYTES_READ)) != 0;
-#endif
+
 	p = (char *) buf;
 	end = (char *) buf + fs->fs_blocksize;
-	while (p < end-8) {
+	while (p < end-12) {
 		dirent = (struct ocfs2_dir_entry *) p;
-#ifdef OCFS2_ENABLE_SWAPFS
-		if (do_swap) {
-			dirent->inode = le64_to_cpu(dirent->inode);
-			dirent->rec_len = le16_to_cpu(dirent->rec_len);
-		}
-#endif
+
+		dirent->inode = le64_to_cpu(dirent->inode);
+		dirent->rec_len = le16_to_cpu(dirent->rec_len);
 		name_len = dirent->name_len;
 		rec_len = dirent->rec_len;
-		if ((rec_len < 8) || (rec_len % 4)) {
-			rec_len = 8;
+
+		if ((rec_len < 12) || (rec_len % 4)) {
+			rec_len = 12;
 			retval = OCFS2_ET_DIR_CORRUPTED;
 		}
-		if (((name_len & 0xFF) + 8) > dirent->rec_len)
+
+		if (((name_len & 0xFF) + 12) > dirent->rec_len)
 			retval = OCFS2_ET_DIR_CORRUPTED;
+
 		p += rec_len;
 	}
 	return retval;
@@ -78,48 +71,35 @@
 errcode_t ocfs2_write_dir_block(ocfs2_filesys *fs, uint64_t block,
                                 void *inbuf)
 {
-#ifdef OCFS2_ENABLE_SWAPFS
-	int		do_swap = 0;
 	errcode_t	retval;
 	char		*p, *end;
 	char		*buf = 0;
 	struct ocfs2_dir_entry *dirent;
 
-	if ((fs->fs_flags & OCFS2_FLAG_SWAP_BYTES) ||
-	    (fs->fs_flags & OCFS2_FLAG_SWAP_BYTES_WRITE))
-		do_swap = 1;
-
-#ifndef WORDS_BIGENDIAN
-	if (!do_swap)
-		return io_write_block(fs->fs_io, block, 1,
-                                      (char *) inbuf);
-#endif
-
 	retval = ocfs2_malloc_block(fs->fs_io, &buf);
 	if (retval)
 		return retval;
+
 	memcpy(buf, inbuf, fs->fs_blocksize);
+
 	p = buf;
 	end = buf + fs->fs_blocksize;
-	while (p < end) {
+	while (p < end-12) {
 		dirent = (struct ocfs2_dir_entry *) p;
-		if ((dirent->rec_len < 8) ||
+
+		if ((dirent->rec_len < 12) ||
 		    (dirent->rec_len % 4)) {
 			ocfs2_free(&buf);
-			return (OCFS2_ET_DIR_CORRUPTED);
+			return OCFS2_ET_DIR_CORRUPTED;
 		}
+
+		dirent->inode = cpu_to_le64(dirent->inode);
+		dirent->rec_len = cpu_to_le16(dirent->rec_len);
+
 		p += dirent->rec_len;
-		if (do_swap) {
-			dirent->inode = cpu_to_le64(dirent->inode);
-			dirent->rec_len = cpu_to_le16(dirent->rec_len);
-		}
 	}
+
  	retval = io_write_block(fs->fs_io, block, 1, buf);
 	ocfs2_free(&buf);
 	return retval;
-#else
- 	return io_write_block(fs->fs_io, block, 1, (char *) inbuf);
-#endif
 }
-
-

Modified: trunk/libocfs2/extents.c
===================================================================
--- trunk/libocfs2/extents.c	2005-01-12 23:53:51 UTC (rev 549)
+++ trunk/libocfs2/extents.c	2005-01-13 19:14:58 UTC (rev 550)
@@ -34,6 +34,20 @@
 
 #include "ocfs2.h"
 
+static void ocfs2_swap_extent_block_to_cpu(ocfs2_extent_block *eb)
+{
+	eb->h_blkno         = le64_to_cpu(eb->h_blkno);
+	eb->h_suballoc_node = le16_to_cpu(eb->h_suballoc_node);
+	eb->h_suballoc_bit  = le16_to_cpu(eb->h_suballoc_bit);
+}
+
+static void ocfs2_swap_extent_block_to_le(ocfs2_extent_block *eb)
+{
+	eb->h_blkno         = cpu_to_le64(eb->h_blkno);
+	eb->h_suballoc_node = cpu_to_le16(eb->h_suballoc_node);
+	eb->h_suballoc_bit  = cpu_to_le16(eb->h_suballoc_bit);
+}
+
 errcode_t ocfs2_read_extent_block_nocheck(ocfs2_filesys *fs, uint64_t blkno,
 					  char *eb_buf)
 {
@@ -61,10 +75,11 @@
 		goto out;
 	}
 
-	/* FIXME swap block */
-
 	memcpy(eb_buf, blk, fs->fs_blocksize);
 
+	eb = (ocfs2_extent_block *) eb_buf;
+	ocfs2_swap_extent_block_to_cpu(eb);
+
 out:
 	ocfs2_free(&blk);
 
@@ -90,6 +105,7 @@
 {
 	errcode_t ret;
 	char *blk;
+	ocfs2_extent_block *eb;
 
 	if (!(fs->fs_flags & OCFS2_FLAG_RW))
 		return OCFS2_ET_RO_FILESYS;
@@ -102,10 +118,11 @@
 	if (ret)
 		return ret;
 
-	/* FIXME Swap block */
-
 	memcpy(blk, eb_buf, fs->fs_blocksize);
 
+	eb = (ocfs2_extent_block *) blk;
+	ocfs2_swap_extent_block_to_le(eb);
+
 	ret = io_write_block(fs->fs_io, blkno, 1, blk);
 	if (ret)
 		goto out;

Modified: trunk/libocfs2/include/ocfs2.h
===================================================================
--- trunk/libocfs2/include/ocfs2.h	2005-01-12 23:53:51 UTC (rev 549)
+++ trunk/libocfs2/include/ocfs2.h	2005-01-13 19:14:58 UTC (rev 550)
@@ -251,6 +251,8 @@
 errcode_t ocfs2_close(ocfs2_filesys *fs);
 void ocfs2_freefs(ocfs2_filesys *fs);
 
+void ocfs2_swap_inode_to_cpu(ocfs2_dinode *di);
+void ocfs2_swap_inode_to_le(ocfs2_dinode *di);
 errcode_t ocfs2_read_inode(ocfs2_filesys *fs, uint64_t blkno,
 			   char *inode_buf);
 errcode_t ocfs2_write_inode(ocfs2_filesys *fs, uint64_t blkno,

Modified: trunk/libocfs2/inode.c
===================================================================
--- trunk/libocfs2/inode.c	2005-01-12 23:53:51 UTC (rev 549)
+++ trunk/libocfs2/inode.c	2005-01-13 19:14:58 UTC (rev 550)
@@ -62,6 +62,48 @@
 	return ret;
 }
 
+
+/* FIXME swap rest of inode as kernel is updated */
+void ocfs2_swap_inode_to_cpu(ocfs2_dinode *di)
+{
+	di->i_generation    = le32_to_cpu(di->i_generation);
+	di->i_suballoc_node = le16_to_cpu(di->i_suballoc_node);
+	di->i_suballoc_bit  = le16_to_cpu(di->i_suballoc_bit);
+	di->i_fs_generation = le32_to_cpu(di->i_fs_generation);
+
+	if (S_ISCHR(di->i_mode) || S_ISBLK(di->i_mode))
+		di->id1.dev1.i_rdev = le64_to_cpu(di->id1.dev1.i_rdev);
+	else if (di->i_flags & OCFS2_JOURNAL_FL)
+		di->id1.journal1.ij_flags =
+			le32_to_cpu(di->id1.journal1.ij_flags);
+	else if (di->i_flags & OCFS2_BITMAP_FL) {
+		di->id1.bitmap1.i_total = 
+			le32_to_cpu(di->id1.bitmap1.i_total);
+		di->id1.bitmap1.i_used = 
+			le32_to_cpu(di->id1.bitmap1.i_used);
+	} 
+}
+
+void ocfs2_swap_inode_to_le(ocfs2_dinode *di)
+{
+	di->i_generation    = cpu_to_le32(di->i_generation);
+	di->i_suballoc_node = cpu_to_le16(di->i_suballoc_node);
+	di->i_suballoc_bit  = cpu_to_le16(di->i_suballoc_bit);
+	di->i_fs_generation = cpu_to_le32(di->i_fs_generation);
+
+	if (S_ISCHR(di->i_mode) || S_ISBLK(di->i_mode))
+		di->id1.dev1.i_rdev = cpu_to_le64(di->id1.dev1.i_rdev);
+	else if (di->i_flags & OCFS2_JOURNAL_FL)
+		di->id1.journal1.ij_flags =
+			cpu_to_le32(di->id1.journal1.ij_flags);
+	else if (di->i_flags & OCFS2_BITMAP_FL) {
+		di->id1.bitmap1.i_total = 
+			cpu_to_le32(di->id1.bitmap1.i_total);
+		di->id1.bitmap1.i_used = 
+			cpu_to_le32(di->id1.bitmap1.i_used);
+	}
+}
+
 errcode_t ocfs2_read_inode(ocfs2_filesys *fs, uint64_t blkno,
 			   char *inode_buf)
 {
@@ -88,10 +130,11 @@
 		   strlen(OCFS2_INODE_SIGNATURE)))
 		goto out;
 
-	/* FIXME swap inode */
-
 	memcpy(inode_buf, blk, fs->fs_blocksize);
 
+	di = (ocfs2_dinode *) inode_buf;
+	ocfs2_swap_inode_to_cpu(di);
+
 	ret = 0;
 out:
 	ocfs2_free(&blk);
@@ -104,6 +147,7 @@
 {
 	errcode_t ret;
 	char *blk;
+	ocfs2_dinode *di;
 
 	if (!(fs->fs_flags & OCFS2_FLAG_RW))
 		return OCFS2_ET_RO_FILESYS;
@@ -116,9 +160,11 @@
 	if (ret)
 		return ret;
 
-	/* FIXME Swap inode */
 	memcpy(blk, inode_buf, fs->fs_blocksize);
 
+	di = (ocfs2_dinode *)blk;
+	ocfs2_swap_inode_to_le(di);
+
 	ret = io_write_block(fs->fs_io, blkno, 1, blk);
 	if (ret)
 		goto out;

Modified: trunk/libocfs2/openfs.c
===================================================================
--- trunk/libocfs2/openfs.c	2005-01-12 23:53:51 UTC (rev 549)
+++ trunk/libocfs2/openfs.c	2005-01-13 19:14:58 UTC (rev 550)
@@ -71,6 +71,46 @@
 	return ret;
 }
 
+static void ocfs2_swap_super_to_cpu(ocfs2_dinode *di)
+{
+	ocfs2_super_block *sb;
+
+	ocfs2_swap_inode_to_cpu(di);
+
+	sb = &di->id2.i_super;
+	sb->s_major_rev_level     = le16_to_cpu(sb->s_major_rev_level);
+	sb->s_minor_rev_level     = le16_to_cpu(sb->s_minor_rev_level);
+	sb->s_feature_compat      = le32_to_cpu(sb->s_feature_compat);
+	sb->s_feature_ro_compat   = le32_to_cpu(sb->s_feature_ro_compat);
+	sb->s_feature_incompat    = le32_to_cpu(sb->s_feature_incompat);
+	sb->s_root_blkno          = le64_to_cpu(sb->s_root_blkno);
+	sb->s_system_dir_blkno    = le64_to_cpu(sb->s_system_dir_blkno);
+	sb->s_blocksize_bits      = le32_to_cpu(sb->s_blocksize_bits);
+	sb->s_clustersize_bits    = le32_to_cpu(sb->s_clustersize_bits);
+	sb->s_max_nodes           = le16_to_cpu(sb->s_max_nodes);
+	sb->s_first_cluster_group = le64_to_cpu(sb->s_first_cluster_group);
+}
+
+static void ocfs2_swap_super_to_le(ocfs2_dinode *di)
+{
+	ocfs2_super_block *sb;
+
+	ocfs2_swap_inode_to_le(di);
+
+	sb = &di->id2.i_super;
+	sb->s_major_rev_level     = cpu_to_le16(sb->s_major_rev_level);
+	sb->s_minor_rev_level     = cpu_to_le16(sb->s_minor_rev_level);
+	sb->s_feature_compat      = cpu_to_le32(sb->s_feature_compat);
+	sb->s_feature_ro_compat   = cpu_to_le32(sb->s_feature_ro_compat);
+	sb->s_feature_incompat    = cpu_to_le32(sb->s_feature_incompat);
+	sb->s_root_blkno          = cpu_to_le64(sb->s_root_blkno);
+	sb->s_system_dir_blkno    = cpu_to_le64(sb->s_system_dir_blkno);
+	sb->s_blocksize_bits      = cpu_to_le32(sb->s_blocksize_bits);
+	sb->s_clustersize_bits    = cpu_to_le32(sb->s_clustersize_bits);
+	sb->s_max_nodes           = cpu_to_le16(sb->s_max_nodes);
+	sb->s_first_cluster_group = cpu_to_le64(sb->s_first_cluster_group);
+}
+
 static errcode_t ocfs2_read_super(ocfs2_filesys *fs, int superblock)
 {
 	errcode_t ret;
@@ -91,13 +131,10 @@
 		   strlen(OCFS2_SUPER_BLOCK_SIGNATURE)))
 		goto out_blk;
 
+	ocfs2_swap_super_to_cpu(di);
+
 	fs->fs_super = di;
 
-	/* FIXME: Swap the sucker here
-	 * ocfs2_swap_inode()
-	 * ocfs2_swap_super()
-	 */
-
 	return 0;
 
 out_blk:
@@ -123,7 +160,9 @@
 		   strlen(OCFS2_SUPER_BLOCK_SIGNATURE)))
 		goto out_blk;
 
+	ocfs2_swap_super_to_le(di);
 	ret = io_write_block(fs->fs_io, OCFS2_SUPER_BLOCK_BLKNO, 1, blk);
+	ocfs2_swap_super_to_cpu(di);
 	if (ret)
 		goto out_blk;
 



More information about the Ocfs2-tools-commits mailing list