Andi Kleen mentioned that the ext2 part of the inode union was rather large.
So I wondered if I could chop it down a bit.
* i_osync is only referenced, never set
* i_faddr, i_frag_no, i_frag_size -- we don't support fragments.
* not_used_1 can clearly be removed.
* i_high_size is obsoleted by the VFS support for 64-bit files.
* i_new_inode is set but never referenced.
I decided not to remove the ACL entries yet.
Index: fs/ext2/ialloc.c
===================================================================
RCS file: /var/cvs/linux/fs/ext2/ialloc.c,v
retrieving revision 1.1.1.3
diff -u -p -r1.1.1.3 ialloc.c
--- fs/ext2/ialloc.c 2000/12/26 00:20:32 1.1.1.3
+++ fs/ext2/ialloc.c 2001/03/12 13:44:25
@@ -432,13 +432,9 @@ repeat:
inode->i_blksize = PAGE_SIZE; /* This is the optimal IO size (for stat), not
the fs block size */
inode->i_blocks = 0;
inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
- inode->u.ext2_i.i_new_inode = 1;
inode->u.ext2_i.i_flags = dir->u.ext2_i.i_flags;
if (S_ISLNK(mode))
inode->u.ext2_i.i_flags &= ~(EXT2_IMMUTABLE_FL | EXT2_APPEND_FL);
- inode->u.ext2_i.i_faddr = 0;
- inode->u.ext2_i.i_frag_no = 0;
- inode->u.ext2_i.i_frag_size = 0;
inode->u.ext2_i.i_file_acl = 0;
inode->u.ext2_i.i_dir_acl = 0;
inode->u.ext2_i.i_dtime = 0;
Index: fs/ext2/inode.c
===================================================================
RCS file: /var/cvs/linux/fs/ext2/inode.c,v
retrieving revision 1.1.1.3
diff -u -p -r1.1.1.3 inode.c
--- fs/ext2/inode.c 2001/01/01 10:32:55 1.1.1.3
+++ fs/ext2/inode.c 2001/03/12 13:43:00
@@ -405,7 +405,7 @@ static int ext2_alloc_branch(struct inod
*branch[n].p = branch[n].key;
mark_buffer_uptodate(bh, 1);
mark_buffer_dirty_inode(bh, inode);
- if (IS_SYNC(inode) || inode->u.ext2_i.i_osync) {
+ if (IS_SYNC(inode)) {
ll_rw_block (WRITE, 1, &bh);
wait_on_buffer (bh);
}
@@ -470,13 +470,13 @@ static inline int ext2_splice_branch(str
/* had we spliced it onto indirect block? */
if (where->bh) {
mark_buffer_dirty_inode(where->bh, inode);
- if (IS_SYNC(inode) || inode->u.ext2_i.i_osync) {
+ if (IS_SYNC(inode)) {
ll_rw_block (WRITE, 1, &where->bh);
wait_on_buffer(where->bh);
}
}
- if (IS_SYNC(inode) || inode->u.ext2_i.i_osync)
+ if (IS_SYNC(inode))
ext2_sync_inode (inode);
else
mark_inode_dirty(inode);
@@ -1036,14 +1036,10 @@ void ext2_read_inode (struct inode * ino
inode->i_blocks = le32_to_cpu(raw_inode->i_blocks);
inode->i_version = ++event;
inode->u.ext2_i.i_flags = le32_to_cpu(raw_inode->i_flags);
- inode->u.ext2_i.i_faddr = le32_to_cpu(raw_inode->i_faddr);
- inode->u.ext2_i.i_frag_no = raw_inode->i_frag;
- inode->u.ext2_i.i_frag_size = raw_inode->i_fsize;
inode->u.ext2_i.i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
if (S_ISDIR(inode->i_mode))
inode->u.ext2_i.i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
else {
- inode->u.ext2_i.i_high_size = le32_to_cpu(raw_inode->i_size_high);
inode->i_size |= ((__u64)le32_to_cpu(raw_inode->i_size_high)) << 32;
}
inode->i_generation = le32_to_cpu(raw_inode->i_generation);
@@ -1112,25 +1108,26 @@ static int ext2_update_inode(struct inod
unsigned long offset;
int err = 0;
struct ext2_group_desc * gdp;
+ struct super_block *sb = inode->i_sb;
if ((inode->i_ino != EXT2_ROOT_INO &&
- inode->i_ino < EXT2_FIRST_INO(inode->i_sb)) ||
- inode->i_ino > le32_to_cpu(inode->i_sb->u.ext2_sb.s_es->s_inodes_count)) {
- ext2_error (inode->i_sb, "ext2_write_inode",
+ inode->i_ino < EXT2_FIRST_INO(sb)) ||
+ inode->i_ino > le32_to_cpu(sb->u.ext2_sb.s_es->s_inodes_count)) {
+ ext2_error (sb, "ext2_write_inode",
"bad inode number: %lu", inode->i_ino);
return -EIO;
}
- block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
- if (block_group >= inode->i_sb->u.ext2_sb.s_groups_count) {
- ext2_error (inode->i_sb, "ext2_write_inode",
+ block_group = (inode->i_ino - 1) / EXT2_INODES_PER_GROUP(sb);
+ if (block_group >= sb->u.ext2_sb.s_groups_count) {
+ ext2_error (sb, "ext2_write_inode",
"group >= groups count");
return -EIO;
}
- group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(inode->i_sb);
- desc = block_group & (EXT2_DESC_PER_BLOCK(inode->i_sb) - 1);
- bh = inode->i_sb->u.ext2_sb.s_group_desc[group_desc];
+ group_desc = block_group >> EXT2_DESC_PER_BLOCK_BITS(sb);
+ desc = block_group & (EXT2_DESC_PER_BLOCK(sb) - 1);
+ bh = sb->u.ext2_sb.s_group_desc[group_desc];
if (!bh) {
- ext2_error (inode->i_sb, "ext2_write_inode",
+ ext2_error (sb, "ext2_write_inode",
"Descriptor not loaded");
return -EIO;
}
@@ -1138,21 +1135,21 @@ static int ext2_update_inode(struct inod
/*
* Figure out the offset within the block group inode table
*/
- offset = ((inode->i_ino - 1) % EXT2_INODES_PER_GROUP(inode->i_sb)) *
- EXT2_INODE_SIZE(inode->i_sb);
+ offset = ((inode->i_ino - 1) % EXT2_INODES_PER_GROUP(sb)) *
+ EXT2_INODE_SIZE(sb);
block = le32_to_cpu(gdp[desc].bg_inode_table) +
- (offset >> EXT2_BLOCK_SIZE_BITS(inode->i_sb));
- if (!(bh = bread (inode->i_dev, block, inode->i_sb->s_blocksize))) {
- ext2_error (inode->i_sb, "ext2_write_inode",
+ (offset >> EXT2_BLOCK_SIZE_BITS(sb));
+ if (!(bh = bread (inode->i_dev, block, sb->s_blocksize))) {
+ ext2_error (sb, "ext2_write_inode",
"unable to read inode block - "
"inode=%lu, block=%lu", inode->i_ino, block);
return -EIO;
}
- offset &= EXT2_BLOCK_SIZE(inode->i_sb) - 1;
+ offset &= EXT2_BLOCK_SIZE(sb) - 1;
raw_inode = (struct ext2_inode *) (bh->b_data + offset);
raw_inode->i_mode = cpu_to_le16(inode->i_mode);
- if(!(test_opt(inode->i_sb, NO_UID32))) {
+ if(!(test_opt(sb, NO_UID32))) {
raw_inode->i_uid_low = cpu_to_le16(low_16_bits(inode->i_uid));
raw_inode->i_gid_low = cpu_to_le16(low_16_bits(inode->i_gid));
/*
@@ -1180,16 +1177,14 @@ static int ext2_update_inode(struct inod
raw_inode->i_blocks = cpu_to_le32(inode->i_blocks);
raw_inode->i_dtime = cpu_to_le32(inode->u.ext2_i.i_dtime);
raw_inode->i_flags = cpu_to_le32(inode->u.ext2_i.i_flags);
- raw_inode->i_faddr = cpu_to_le32(inode->u.ext2_i.i_faddr);
- raw_inode->i_frag = inode->u.ext2_i.i_frag_no;
- raw_inode->i_fsize = inode->u.ext2_i.i_frag_size;
+ raw_inode->i_frag = 0;
+ raw_inode->i_fsize = 0;
raw_inode->i_file_acl = cpu_to_le32(inode->u.ext2_i.i_file_acl);
if (S_ISDIR(inode->i_mode))
raw_inode->i_dir_acl = cpu_to_le32(inode->u.ext2_i.i_dir_acl);
else {
raw_inode->i_size_high = cpu_to_le32(inode->i_size >> 32);
if (raw_inode->i_size_high) {
- struct super_block *sb = inode->i_sb;
if (!EXT2_HAS_RO_COMPAT_FEATURE(sb,
EXT2_FEATURE_RO_COMPAT_LARGE_FILE) ||
EXT2_SB(sb)->s_es->s_rev_level ==
Index: include/linux/ext2_fs_i.h
===================================================================
RCS file: /var/cvs/linux/include/linux/ext2_fs_i.h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 ext2_fs_i.h
--- include/linux/ext2_fs_i.h 1999/05/11 21:37:47 1.1.1.1
+++ include/linux/ext2_fs_i.h 2001/03/12 13:44:05
@@ -22,21 +22,14 @@
struct ext2_inode_info {
__u32 i_data[15];
__u32 i_flags;
- __u32 i_faddr;
- __u8 i_frag_no;
- __u8 i_frag_size;
- __u16 i_osync;
__u32 i_file_acl;
__u32 i_dir_acl;
__u32 i_dtime;
- __u32 not_used_1; /* FIX: not used/ 2.2 placeholder */
__u32 i_block_group;
__u32 i_next_alloc_block;
__u32 i_next_alloc_goal;
__u32 i_prealloc_block;
__u32 i_prealloc_count;
- __u32 i_high_size;
- int i_new_inode:1; /* Is a freshly allocated inode */
};
#endif /* _LINUX_EXT2_FS_I */
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [EMAIL PROTECTED]