rfc: [patch 3/6] more e2fsprogs fixes

Alexandre Ratchov <[email protected]> Fri, 25 Aug 2006 15:18:40 +0200
Newsgroups gmane.comp.file-systems.ext2.devel
Message-ID <[email protected]>
add bg_{block_bitmap,inode_bitmap,inode_table}_hi fields in
struct ext2_group_desc and use absolute block numbers. While
this is not necessary, IMHO this is simpler than relative
addressing, and this change make e2fsprogs "just" work.

Index: e2fsprogs-1.39/lib/ext2fs/ext2_fs.h
===================================================================
--- e2fsprogs-1.39.orig/lib/ext2fs/ext2_fs.h	2006-08-22 15:49:35.000000000 +0200
+++ e2fsprogs-1.39/lib/ext2fs/ext2_fs.h	2006-08-24 19:42:32.000000000 +0200
@@ -137,14 +137,17 @@ struct ext2_acl_entry	/* Access Control 
  */
 struct ext2_group_desc
 {
-	__u32	bg_block_bitmap;		/* Blocks bitmap block */
-	__u32	bg_inode_bitmap;		/* Inodes bitmap block */
+	__u32	bg_block_bitmap;	/* Blocks bitmap block */
+	__u32	bg_inode_bitmap;	/* Inodes bitmap block */
 	__u32	bg_inode_table;		/* Inodes table block */
 	__u16	bg_free_blocks_count;	/* Free blocks count */
 	__u16	bg_free_inodes_count;	/* Free inodes count */
 	__u16	bg_used_dirs_count;	/* Directories count */
 	__u16	bg_flags;
-	__u32	bg_reserved[3];
+	__u32	bg_block_bitmap_hi;	/* Blocks bitmap block */
+	__u32	bg_inode_bitmap_hi;	/* Inodes bitmap block */
+	__u32	bg_inode_table_hi;	/* Inodes table block */
+	/*__u16	bg_reserved[3];*/
 };
 
 #define EXT2_BG_INODE_UNINIT	0x0001 /* Inode table/bitmap not initialized */
@@ -153,35 +156,35 @@ struct ext2_group_desc
 #define EXT2_GROUP_BASE(s,g)	((blk_t)(s)->s_first_data_block + \
 				 (blk_t)(s)->s_blocks_per_group * (g))
 
-#define EXT2_RELATIVE(group_base, block)		   \
-	((blk_t)(block) < (blk_t)(group_base) ?	   \
-		(blk_t)(block) + (blk_t)(group_base) - 1 : \
-		(blk_t)(block))
-#define EXT2_RELATIVE_SET(group_base, block, value)		 \
-	(block) = (blk_t)(value) & 0xFFFFFFFF00000000ULL ? \
-		  (blk_t)(value) - (blk_t)(group_base) + 1 :	 \
-		  (blk_t)(value)
-
 #define EXT2_BLOCK_BITMAP(bg, group_base)	\
-		EXT2_RELATIVE((group_base),(bg)->bg_block_bitmap)
+	((bg)->bg_block_bitmap + ((blk_t)(bg)->bg_block_bitmap_hi << 32))
 #define EXT2_INODE_BITMAP(bg, group_base)	\
-		EXT2_RELATIVE((group_base),(bg)->bg_inode_bitmap)
+	((bg)->bg_inode_bitmap + ((blk_t)(bg)->bg_inode_bitmap_hi << 32))
 #define EXT2_INODE_TABLE(bg, group_base)	\
-		EXT2_RELATIVE((group_base),(bg)->bg_inode_table)
+	((bg)->bg_inode_table + ((blk_t)(bg)->bg_inode_table_hi << 32))
 
-#define EXT2_BLOCK_BITMAP_SET(bg, group_base, value)	\
-		EXT2_RELATIVE_SET((group_base),(bg)->bg_block_bitmap, value)
-#define EXT2_INODE_BITMAP_SET(bg, group_base, value)	\
-		EXT2_RELATIVE_SET((group_base),(bg)->bg_inode_bitmap, value)
-#define EXT2_INODE_TABLE_SET(bg, group_base, value)	\
-		EXT2_RELATIVE_SET((group_base),(bg)->bg_inode_table, value)
+#define EXT2_BLOCK_BITMAP_SET(bg, group_base, value)		\
+	do {							\
+		(bg)->bg_block_bitmap = (__u32)(value);		\
+		(bg)->bg_block_bitmap_hi = (value) >> 32;	\
+	} while(0)
+#define EXT2_INODE_BITMAP_SET(bg, group_base, value)		\
+	do {							\
+		(bg)->bg_inode_bitmap = (__u32)(value);		\
+		(bg)->bg_inode_bitmap_hi = (value) >> 32;	\
+	} while(0)
+#define EXT2_INODE_TABLE_SET(bg, group_base, value)		\
+	do {							\
+		(bg)->bg_inode_table = (__u32)(value);		\
+		(bg)->bg_inode_table_hi = (value) >> 32;	\
+	} while(0)
 
 #define EXT2_IS_USED_BLOCK_BITMAP(bg)	\
-	((bg)->bg_block_bitmap != 0)
+	((bg)->bg_block_bitmap != 0 || (bg)->bg_block_bitmap_hi != 0)
 #define EXT2_IS_USED_INODE_BITMAP(bg)	\
-	((bg)->bg_inode_bitmap != 0)
+	((bg)->bg_inode_bitmap != 0 || (bg)->bg_inode_bitmap_hi != 0)
 #define EXT2_IS_USED_INODE_TABLE(bg)	\
-	((bg)->bg_inode_table != 0)
+	((bg)->bg_inode_table != 0 || (bg)->bg_inode_table_hi != 0)
 /*
  * Data structures used by the directory indexing feature
  *

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642