summaryrefslogtreecommitdiffstats
path: root/sys/gnu
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1998-10-13 15:45:43 +0000
committerbde <bde@FreeBSD.org>1998-10-13 15:45:43 +0000
commit8ccf93af582d83baeb145bbbbd40f6cd8fe99c68 (patch)
tree44cc40318f4ab5469f77e85d0002b65783b92f2a /sys/gnu
parent43cb8a7cb93931496071f3ec7aa0f9bc83cf82e6 (diff)
downloadFreeBSD-src-8ccf93af582d83baeb145bbbbd40f6cd8fe99c68.zip
FreeBSD-src-8ccf93af582d83baeb145bbbbd40f6cd8fe99c68.tar.gz
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).
Diffstat (limited to 'sys/gnu')
-rw-r--r--sys/gnu/ext2fs/ext2_extern.h4
-rw-r--r--sys/gnu/ext2fs/ext2_fs.h4
-rw-r--r--sys/gnu/ext2fs/ext2_linux_balloc.c4
-rw-r--r--sys/gnu/ext2fs/inode.h4
-rw-r--r--sys/gnu/fs/ext2fs/ext2_extern.h4
-rw-r--r--sys/gnu/fs/ext2fs/ext2_fs.h4
-rw-r--r--sys/gnu/fs/ext2fs/ext2_linux_balloc.c4
-rw-r--r--sys/gnu/fs/ext2fs/inode.h4
8 files changed, 16 insertions, 16 deletions
diff --git a/sys/gnu/ext2fs/ext2_extern.h b/sys/gnu/ext2fs/ext2_extern.h
index eb18348..0afd890 100644
--- a/sys/gnu/ext2fs/ext2_extern.h
+++ b/sys/gnu/ext2fs/ext2_extern.h
@@ -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,
diff --git a/sys/gnu/ext2fs/ext2_fs.h b/sys/gnu/ext2fs/ext2_fs.h
index 655a9df..ce45bbd 100644
--- a/sys/gnu/ext2fs/ext2_fs.h
+++ b/sys/gnu/ext2fs/ext2_fs.h
@@ -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
diff --git a/sys/gnu/ext2fs/ext2_linux_balloc.c b/sys/gnu/ext2fs/ext2_linux_balloc.c
index 717b0e0..56ea652 100644
--- a/sys/gnu/ext2fs/ext2_linux_balloc.c
+++ b/sys/gnu/ext2fs/ext2_linux_balloc.c
@@ -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;
diff --git a/sys/gnu/ext2fs/inode.h b/sys/gnu/ext2fs/inode.h
index 76b7b5e..4b6ca7d 100644
--- a/sys/gnu/ext2fs/inode.h
+++ b/sys/gnu/ext2fs/inode.h
@@ -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.
*/
diff --git a/sys/gnu/fs/ext2fs/ext2_extern.h b/sys/gnu/fs/ext2fs/ext2_extern.h
index eb18348..0afd890 100644
--- a/sys/gnu/fs/ext2fs/ext2_extern.h
+++ b/sys/gnu/fs/ext2fs/ext2_extern.h
@@ -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,
diff --git a/sys/gnu/fs/ext2fs/ext2_fs.h b/sys/gnu/fs/ext2fs/ext2_fs.h
index 655a9df..ce45bbd 100644
--- a/sys/gnu/fs/ext2fs/ext2_fs.h
+++ b/sys/gnu/fs/ext2fs/ext2_fs.h
@@ -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
diff --git a/sys/gnu/fs/ext2fs/ext2_linux_balloc.c b/sys/gnu/fs/ext2fs/ext2_linux_balloc.c
index 717b0e0..56ea652 100644
--- a/sys/gnu/fs/ext2fs/ext2_linux_balloc.c
+++ b/sys/gnu/fs/ext2fs/ext2_linux_balloc.c
@@ -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;
diff --git a/sys/gnu/fs/ext2fs/inode.h b/sys/gnu/fs/ext2fs/inode.h
index 76b7b5e..4b6ca7d 100644
--- a/sys/gnu/fs/ext2fs/inode.h
+++ b/sys/gnu/fs/ext2fs/inode.h
@@ -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.
*/
OpenPOWER on IntegriCloud