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:
Bruce Evans 1998-10-13 15:45:43 +00:00
parent 202bab3944
commit d2165c2f7d
9 changed files with 18 additions and 18 deletions

View File

@ -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,

View File

@ -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

View File

@ -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;

View File

@ -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.
*/

View File

@ -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,

View File

@ -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

View File

@ -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;

View File

@ -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.
*/

View File

@ -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.
*/