rfc: [patch 6/6] more e2fsprogs fixes
Alexandre Ratchov <[email protected]> Fri, 25 Aug 2006 15:22:13 +0200
| Newsgroups | gmane.comp.file-systems.ext2.devel |
|---|---|
| Message-ID | <[email protected]> |
this is the kernel side of 18-blk-64bit-desc48 patch. It
adds bg_{block_bitmap,inode_bitmap,inode_table}_hi fields in
group descriptors and removes relative adressing.
Index: linux-2.6.18-rc4/include/linux/ext4_fs.h
===================================================================
--- linux-2.6.18-rc4.orig/include/linux/ext4_fs.h 2006-08-22 20:33:48.000000000 +0200
+++ linux-2.6.18-rc4/include/linux/ext4_fs.h 2006-08-23 18:07:14.000000000 +0200
@@ -133,59 +133,42 @@ struct ext4_group_desc
__le16 bg_free_inodes_count; /* Free inodes count */
__le16 bg_used_dirs_count; /* Directories count */
__u16 bg_pad;
- __le32 bg_reserved[3];
+ __le32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
+ __le32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
+ __le32 bg_inode_table_hi; /* Inodes table block MSB */
};
#ifdef __KERNEL__
#include <linux/ext4_fs_i.h>
#include <linux/ext4_fs_sb.h>
-static inline u32 EXT4_RELATIVE_ENCODE(ext4_fsblk_t group_base,
- ext4_fsblk_t fs_block)
-{
- s32 gdp_block;
-
- if (fs_block < (1ULL<<32) && group_base < (1ULL<<32))
- return fs_block;
-
- gdp_block = (fs_block - group_base);
- BUG_ON ((group_base + gdp_block) != fs_block);
-
- return gdp_block;
-}
-
-static inline ext4_fsblk_t EXT4_RELATIVE_DECODE(ext4_fsblk_t group_base,
- u32 gdp_block)
-{
- if (group_base >= (1ULL<<32))
- return group_base + (s32) gdp_block;
-
- if ((s32) gdp_block >= 0 && gdp_block < group_base &&
- group_base + gdp_block >= (1ULL<<32))
- return group_base + gdp_block;
-
- return gdp_block;
-}
-
-#define EXT4_BLOCK_BITMAP(bg, group_base) \
- EXT4_RELATIVE_DECODE(group_base, le32_to_cpu((bg)->bg_block_bitmap))
-#define EXT4_INODE_BITMAP(bg, group_base) \
- EXT4_RELATIVE_DECODE(group_base, le32_to_cpu((bg)->bg_inode_bitmap))
-#define EXT4_INODE_TABLE(bg, group_base) \
- EXT4_RELATIVE_DECODE(group_base, le32_to_cpu((bg)->bg_inode_table))
-
-#define EXT4_BLOCK_BITMAP_SET(bg, group_base, value) \
- do {(bg)->bg_block_bitmap = EXT4_RELATIVE_ENCODE(group_base, value);} while(0)
-#define EXT4_INODE_BITMAP_SET(bg, group_base, value) \
- do {(bg)->bg_inode_bitmap = EXT4_RELATIVE_ENCODE(group_base, value);} while(0)
-#define EXT4_INODE_TABLE_SET(bg, group_base, value) \
- do {(bg)->bg_inode_table = EXT4_RELATIVE_ENCODE(group_base, value);} while(0)
+#define EXT4_BLOCK_BITMAP(bg, group_base) \
+ ((ext4_fsblk_t)(le32_to_cpu((bg)->bg_block_bitmap) | \
+ ((u64)le32_to_cpu((bg)->bg_block_bitmap_hi) << 32)))
+#define EXT4_INODE_BITMAP(bg, group_base) \
+ ((ext4_fsblk_t)(le32_to_cpu((bg)->bg_inode_bitmap) | \
+ ((u64)le32_to_cpu((bg)->bg_inode_bitmap_hi) << 32)))
+#define EXT4_INODE_TABLE(bg, group_base) \
+ ((ext4_fsblk_t)(le32_to_cpu((bg)->bg_inode_table) | \
+ ((u64)le32_to_cpu((bg)->bg_inode_table_hi) << 32)))
+#define EXT4_BLOCK_BITMAP_SET(bg, group_base, val) do { \
+ (bg)->bg_block_bitmap = cpu_to_le32((val) & 0xffffffff); \
+ (bg)->bg_block_bitmap_hi = cpu_to_le32((val) >> 32); \
+} while(0)
+#define EXT4_INODE_BITMAP_SET(bg, group_base, val) do { \
+ (bg)->bg_inode_bitmap = cpu_to_le32((val) & 0xffffffff); \
+ (bg)->bg_inode_bitmap_hi = cpu_to_le32((val) >> 32); \
+} while(0)
+#define EXT4_INODE_TABLE_SET(bg, group_base, val) do { \
+ (bg)->bg_inode_table = cpu_to_le32((val) & 0xffffffff); \
+ (bg)->bg_inode_table_hi = cpu_to_le32((val) >> 32); \
+} while(0)
#define EXT4_IS_USED_BLOCK_BITMAP(bg) \
- ((bg)->bg_block_bitmap != 0)
+ ((bg)->bg_block_bitmap != 0 || (bg)->bg_block_bitmap_hi != 0)
#define EXT4_IS_USED_INODE_BITMAP(bg) \
- ((bg)->bg_inode_bitmap != 0)
+ ((bg)->bg_inode_bitmap != 0 || (bg)->bg_inode_bitmap_hi != 0)
#define EXT4_IS_USED_INODE_TABLE(bg) \
- ((bg)->bg_inode_table != 0)
+ ((bg)->bg_inode_table != 0 || (bg)->bg_inode_table_hi != 0)
#endif
/*
* Macro-instructions used to manage group descriptors
@@ -249,9 +232,9 @@ static inline ext4_fsblk_t EXT4_RELATIVE
/* Used to pass group descriptor data when online resize is done */
struct ext4_new_group_input {
__u32 group; /* Group number for this data */
- __u32 block_bitmap; /* Absolute block number of block bitmap */
- __u32 inode_bitmap; /* Absolute block number of inode bitmap */
- __u32 inode_table; /* Absolute block number of inode table start */
+ __u64 block_bitmap; /* Absolute block number of block bitmap */
+ __u64 inode_bitmap; /* Absolute block number of inode bitmap */
+ __u64 inode_table; /* Absolute block number of inode table start */
__u32 blocks_count; /* Total number of blocks in this group */
__u16 reserved_blocks; /* Number of reserved blocks in this group */
__u16 unused;
@@ -260,9 +243,9 @@ struct ext4_new_group_input {
/* The struct ext4_new_group_input in kernel space, with free_blocks_count */
struct ext4_new_group_data {
__u32 group;
- __u32 block_bitmap;
- __u32 inode_bitmap;
- __u32 inode_table;
+ __u64 block_bitmap;
+ __u64 inode_bitmap;
+ __u64 inode_table;
__u32 blocks_count;
__u16 reserved_blocks;
__u16 unused;
-------------------------------------------------------------------------
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