[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