From: Mingming Cao Cleans up the old ext3 preallocation code carried from ext2 but turned off. --- 25-akpm/fs/ext3/balloc.c | 3 - 25-akpm/fs/ext3/file.c | 2 25-akpm/fs/ext3/ialloc.c | 4 - 25-akpm/fs/ext3/inode.c | 91 -------------------------------------- 25-akpm/fs/ext3/xattr.c | 2 25-akpm/include/linux/ext3_fs.h | 9 --- 25-akpm/include/linux/ext3_fs_i.h | 4 - 7 files changed, 4 insertions(+), 111 deletions(-) diff -puN fs/ext3/balloc.c~ext3_rsv_cleanup fs/ext3/balloc.c --- 25/fs/ext3/balloc.c~ext3_rsv_cleanup 2004-04-14 18:58:16.492957832 -0700 +++ 25-akpm/fs/ext3/balloc.c 2004-04-14 18:58:16.505955856 -0700 @@ -474,8 +474,7 @@ fail: * This function also updates quota and i_blocks field. */ int -ext3_new_block(handle_t *handle, struct inode *inode, unsigned long goal, - u32 *prealloc_count, u32 *prealloc_block, int *errp) +ext3_new_block(handle_t *handle, struct inode *inode, unsigned long goal, int *errp) { struct buffer_head *bitmap_bh = NULL; /* bh */ struct buffer_head *gdp_bh; /* bh2 */ diff -puN fs/ext3/file.c~ext3_rsv_cleanup fs/ext3/file.c --- 25/fs/ext3/file.c~ext3_rsv_cleanup 2004-04-14 18:58:16.494957528 -0700 +++ 25-akpm/fs/ext3/file.c 2004-04-14 18:58:16.505955856 -0700 @@ -33,8 +33,6 @@ */ static int ext3_release_file (struct inode * inode, struct file * filp) { - if (filp->f_mode & FMODE_WRITE) - ext3_discard_prealloc (inode); if (is_dx(inode) && filp->private_data) ext3_htree_free_dir_info(filp->private_data); diff -puN fs/ext3/ialloc.c~ext3_rsv_cleanup fs/ext3/ialloc.c --- 25/fs/ext3/ialloc.c~ext3_rsv_cleanup 2004-04-14 18:58:16.496957224 -0700 +++ 25-akpm/fs/ext3/ialloc.c 2004-04-14 18:58:16.506955704 -0700 @@ -581,10 +581,6 @@ got: ei->i_file_acl = 0; ei->i_dir_acl = 0; ei->i_dtime = 0; -#ifdef EXT3_PREALLOCATE - ei->i_prealloc_block = 0; - ei->i_prealloc_count = 0; -#endif ei->i_block_group = group; ext3_set_inode_flags(inode); diff -puN fs/ext3/inode.c~ext3_rsv_cleanup fs/ext3/inode.c --- 25/fs/ext3/inode.c~ext3_rsv_cleanup 2004-04-14 18:58:16.497957072 -0700 +++ 25-akpm/fs/ext3/inode.c 2004-04-14 18:58:16.511954944 -0700 @@ -185,8 +185,6 @@ static int ext3_journal_test_restart(han */ void ext3_put_inode(struct inode *inode) { - if (!is_bad_inode(inode)) - ext3_discard_prealloc(inode); } /* @@ -244,62 +242,12 @@ no_delete: clear_inode(inode); /* We must guarantee clearing of inode... */ } -void ext3_discard_prealloc (struct inode * inode) -{ -#ifdef EXT3_PREALLOCATE - struct ext3_inode_info *ei = EXT3_I(inode); - /* Writer: ->i_prealloc* */ - if (ei->i_prealloc_count) { - unsigned short total = ei->i_prealloc_count; - unsigned long block = ei->i_prealloc_block; - ei->i_prealloc_count = 0; - ei->i_prealloc_block = 0; - /* Writer: end */ - ext3_free_blocks (inode, block, total); - } -#endif -} - static int ext3_alloc_block (handle_t *handle, struct inode * inode, unsigned long goal, int *err) { unsigned long result; -#ifdef EXT3_PREALLOCATE -#ifdef EXT3FS_DEBUG - static unsigned long alloc_hits, alloc_attempts; -#endif - struct ext3_inode_info *ei = EXT3_I(inode); - /* Writer: ->i_prealloc* */ - if (ei->i_prealloc_count && - (goal == ei->i_prealloc_block || - goal + 1 == ei->i_prealloc_block)) - { - result = ei->i_prealloc_block++; - ei->i_prealloc_count--; - /* Writer: end */ - ext3_debug ("preallocation hit (%lu/%lu).\n", - ++alloc_hits, ++alloc_attempts); - } else { - ext3_discard_prealloc (inode); - ext3_debug ("preallocation miss (%lu/%lu).\n", - alloc_hits, ++alloc_attempts); - if (S_ISREG(inode->i_mode)) - result = ext3_new_block (inode, goal, - &ei->i_prealloc_count, - &ei->i_prealloc_block, err); - else - result = ext3_new_block (inode, goal, 0, 0, err); - /* - * AKPM: this is somewhat sticky. I'm not surprised it was - * disabled in 2.2's ext3. Need to integrate b_committed_data - * guarding with preallocation, if indeed preallocation is - * effective. - */ - } -#else - result = ext3_new_block (handle, inode, goal, 0, 0, err); -#endif + result = ext3_new_block (handle, inode, goal, err); return result; } @@ -966,38 +914,6 @@ struct buffer_head *ext3_bread(handle_t bh = ext3_getblk (handle, inode, block, create, err); if (!bh) return bh; -#ifdef EXT3_PREALLOCATE - /* - * If the inode has grown, and this is a directory, then use a few - * more of the preallocated blocks to keep directory fragmentation - * down. The preallocated blocks are guaranteed to be contiguous. - */ - if (create && - S_ISDIR(inode->i_mode) && - inode->i_blocks > prev_blocks && - EXT3_HAS_COMPAT_FEATURE(inode->i_sb, - EXT3_FEATURE_COMPAT_DIR_PREALLOC)) { - int i; - struct buffer_head *tmp_bh; - - for (i = 1; - EXT3_I(inode)->i_prealloc_count && - i < EXT3_SB(inode->i_sb)->s_es->s_prealloc_dir_blocks; - i++) { - /* - * ext3_getblk will zero out the contents of the - * directory for us - */ - tmp_bh = ext3_getblk(handle, inode, - block+i, create, err); - if (!tmp_bh) { - brelse (bh); - return 0; - } - brelse (tmp_bh); - } - } -#endif if (buffer_uptodate(bh)) return bh; ll_rw_block (READ, 1, &bh); @@ -2136,8 +2052,6 @@ void ext3_truncate(struct inode * inode) if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) return; - ext3_discard_prealloc(inode); - /* * We have to lock the EOF page here, because lock_page() nests * outside journal_start(). @@ -2529,9 +2443,6 @@ void ext3_read_inode(struct inode * inod } ei->i_disksize = inode->i_size; inode->i_generation = le32_to_cpu(raw_inode->i_generation); -#ifdef EXT3_PREALLOCATE - ei->i_prealloc_count = 0; -#endif ei->i_block_group = iloc.block_group; /* diff -puN fs/ext3/xattr.c~ext3_rsv_cleanup fs/ext3/xattr.c --- 25/fs/ext3/xattr.c~ext3_rsv_cleanup 2004-04-14 18:58:16.499956768 -0700 +++ 25-akpm/fs/ext3/xattr.c 2004-04-14 18:58:16.512954792 -0700 @@ -787,7 +787,7 @@ ext3_xattr_set_handle2(handle_t *handle, EXT3_I(inode)->i_block_group * EXT3_BLOCKS_PER_GROUP(sb); int block = ext3_new_block(handle, - inode, goal, 0, 0, &error); + inode, goal, &error); if (error) goto cleanup; ea_idebug(inode, "creating block %d", block); diff -puN include/linux/ext3_fs.h~ext3_rsv_cleanup include/linux/ext3_fs.h --- 25/include/linux/ext3_fs.h~ext3_rsv_cleanup 2004-04-14 18:58:16.500956616 -0700 +++ 25-akpm/include/linux/ext3_fs.h 2004-04-14 18:58:16.513954640 -0700 @@ -33,12 +33,6 @@ struct statfs; #undef EXT3FS_DEBUG /* - * Define EXT3_PREALLOCATE to preallocate data blocks for expanding files - */ -#undef EXT3_PREALLOCATE /* @@@ Fix this! */ -#define EXT3_DEFAULT_PREALLOC_BLOCKS 8 - -/* * Always enable hashed directories */ #define CONFIG_EXT3_INDEX @@ -680,8 +674,7 @@ struct dir_private_info { /* balloc.c */ extern int ext3_bg_has_super(struct super_block *sb, int group); extern unsigned long ext3_bg_num_gdb(struct super_block *sb, int group); -extern int ext3_new_block (handle_t *, struct inode *, unsigned long, - __u32 *, __u32 *, int *); +extern int ext3_new_block (handle_t *, struct inode *, unsigned long, int *); extern void ext3_free_blocks (handle_t *, struct inode *, unsigned long, unsigned long); extern unsigned long ext3_count_free_blocks (struct super_block *); diff -puN include/linux/ext3_fs_i.h~ext3_rsv_cleanup include/linux/ext3_fs_i.h --- 25/include/linux/ext3_fs_i.h~ext3_rsv_cleanup 2004-04-14 18:58:16.501956464 -0700 +++ 25-akpm/include/linux/ext3_fs_i.h 2004-04-14 18:58:16.514954488 -0700 @@ -57,10 +57,6 @@ struct ext3_inode_info { * allocation when we detect linearly ascending requests. */ __u32 i_next_alloc_goal; -#ifdef EXT3_PREALLOCATE - __u32 i_prealloc_block; - __u32 i_prealloc_count; -#endif __u32 i_dir_start_lookup; #ifdef CONFIG_EXT3_FS_XATTR /* _