Fixed bloatage of `struct inode'. We used 5 "spare" fields for ext2fs,
but when i_effnlink was added to support soft updates, there was only room for 4 spares. The number of spares was not reduced, so the inode size became 260 (on i386's), or 512 after rounding up by malloc(). Use one spare field in `struct dinode' instead of the 5th spare field in the inode and reduced to 4 spares in the inode so that the size is 256 again. Changed the types of the spares in the inode from int to u_int32_t so that the inode size has more chance of being <= 256 under other arches, and downdated ext2fs to match (it was broken to use ints before rev.1.1).
This commit is contained in:
parent
202bab3944
commit
d2165c2f7d
@ -81,8 +81,8 @@ struct ext2_group_desc * get_group_desc __P((struct mount * ,
|
||||
void ext2_discard_prealloc __P((struct inode *));
|
||||
int ext2_inactive __P((struct vop_inactive_args *));
|
||||
int ext2_new_block __P ((struct mount * mp, unsigned long goal,
|
||||
int * prealloc_count,
|
||||
int * prealloc_block));
|
||||
u_int32_t * prealloc_count,
|
||||
u_int32_t * prealloc_block));
|
||||
ino_t ext2_new_inode __P ((const struct inode * dir, int mode));
|
||||
unsigned long ext2_count_free __P((struct buf *map, unsigned int numchars));
|
||||
void ext2_free_blocks __P((struct mount * mp, unsigned long block,
|
||||
|
@ -38,7 +38,7 @@
|
||||
/* the Linux implementation of EXT2 stores some information about
|
||||
* an inode in a ext2_inode_info structure which is part of the incore
|
||||
* inode in Linux
|
||||
* I decided to use the i_spare[11] fields instead - we'll see how this
|
||||
* I decided to use the "spare" fields instead - we'll see how this
|
||||
* works out
|
||||
*/
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
#define i_next_alloc_block i_spare[1]
|
||||
#define i_next_alloc_goal i_spare[2]
|
||||
#define i_prealloc_block i_spare[3]
|
||||
#define i_prealloc_count i_spare[4]
|
||||
#define i_prealloc_count i_din.di_spare[0]
|
||||
|
||||
/*
|
||||
* The second extended filesystem constants/structures
|
||||
|
@ -244,8 +244,8 @@ void ext2_free_blocks (struct mount * mp, unsigned long block,
|
||||
* bitmap, and then for any free bit if that fails.
|
||||
*/
|
||||
int ext2_new_block (struct mount * mp, unsigned long goal,
|
||||
int * prealloc_count,
|
||||
int * prealloc_block)
|
||||
u_int32_t * prealloc_count,
|
||||
u_int32_t * prealloc_block)
|
||||
{
|
||||
struct ext2_sb_info *sb = VFSTOUFS(mp)->um_e2fs;
|
||||
struct buffer_head * bh;
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.22 1998/03/26 20:53:58 phk Exp $
|
||||
* $Id: inode.h,v 1.23 1998/07/03 22:17:01 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -92,7 +92,7 @@ struct inode {
|
||||
doff_t i_offset; /* Offset of free space in directory. */
|
||||
ino_t i_ino; /* Inode number of found directory. */
|
||||
u_int32_t i_reclen; /* Size of found directory entry. */
|
||||
int i_spare[5]; /* XXX actually non-spare (for ext2fs). */
|
||||
u_int32_t i_spare[4]; /* XXX actually non-spare (for ext2fs). */
|
||||
/*
|
||||
* The on-disk dinode itself.
|
||||
*/
|
||||
|
@ -81,8 +81,8 @@ struct ext2_group_desc * get_group_desc __P((struct mount * ,
|
||||
void ext2_discard_prealloc __P((struct inode *));
|
||||
int ext2_inactive __P((struct vop_inactive_args *));
|
||||
int ext2_new_block __P ((struct mount * mp, unsigned long goal,
|
||||
int * prealloc_count,
|
||||
int * prealloc_block));
|
||||
u_int32_t * prealloc_count,
|
||||
u_int32_t * prealloc_block));
|
||||
ino_t ext2_new_inode __P ((const struct inode * dir, int mode));
|
||||
unsigned long ext2_count_free __P((struct buf *map, unsigned int numchars));
|
||||
void ext2_free_blocks __P((struct mount * mp, unsigned long block,
|
||||
|
@ -38,7 +38,7 @@
|
||||
/* the Linux implementation of EXT2 stores some information about
|
||||
* an inode in a ext2_inode_info structure which is part of the incore
|
||||
* inode in Linux
|
||||
* I decided to use the i_spare[11] fields instead - we'll see how this
|
||||
* I decided to use the "spare" fields instead - we'll see how this
|
||||
* works out
|
||||
*/
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
#define i_next_alloc_block i_spare[1]
|
||||
#define i_next_alloc_goal i_spare[2]
|
||||
#define i_prealloc_block i_spare[3]
|
||||
#define i_prealloc_count i_spare[4]
|
||||
#define i_prealloc_count i_din.di_spare[0]
|
||||
|
||||
/*
|
||||
* The second extended filesystem constants/structures
|
||||
|
@ -244,8 +244,8 @@ void ext2_free_blocks (struct mount * mp, unsigned long block,
|
||||
* bitmap, and then for any free bit if that fails.
|
||||
*/
|
||||
int ext2_new_block (struct mount * mp, unsigned long goal,
|
||||
int * prealloc_count,
|
||||
int * prealloc_block)
|
||||
u_int32_t * prealloc_count,
|
||||
u_int32_t * prealloc_block)
|
||||
{
|
||||
struct ext2_sb_info *sb = VFSTOUFS(mp)->um_e2fs;
|
||||
struct buffer_head * bh;
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.22 1998/03/26 20:53:58 phk Exp $
|
||||
* $Id: inode.h,v 1.23 1998/07/03 22:17:01 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -92,7 +92,7 @@ struct inode {
|
||||
doff_t i_offset; /* Offset of free space in directory. */
|
||||
ino_t i_ino; /* Inode number of found directory. */
|
||||
u_int32_t i_reclen; /* Size of found directory entry. */
|
||||
int i_spare[5]; /* XXX actually non-spare (for ext2fs). */
|
||||
u_int32_t i_spare[4]; /* XXX actually non-spare (for ext2fs). */
|
||||
/*
|
||||
* The on-disk dinode itself.
|
||||
*/
|
||||
|
@ -36,7 +36,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)inode.h 8.9 (Berkeley) 5/14/95
|
||||
* $Id: inode.h,v 1.22 1998/03/26 20:53:58 phk Exp $
|
||||
* $Id: inode.h,v 1.23 1998/07/03 22:17:01 bde Exp $
|
||||
*/
|
||||
|
||||
#ifndef _UFS_UFS_INODE_H_
|
||||
@ -92,7 +92,7 @@ struct inode {
|
||||
doff_t i_offset; /* Offset of free space in directory. */
|
||||
ino_t i_ino; /* Inode number of found directory. */
|
||||
u_int32_t i_reclen; /* Size of found directory entry. */
|
||||
int i_spare[5]; /* XXX actually non-spare (for ext2fs). */
|
||||
u_int32_t i_spare[4]; /* XXX actually non-spare (for ext2fs). */
|
||||
/*
|
||||
* The on-disk dinode itself.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user