
From: Mingming Cao <cmm@us.ibm.com>

Cleans up the old ext3 preallocation code carried from ext2 but turned off.

Signed-off-by:  Andrew Morton <akpm@osdl.org>
---
 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-05-25 22:09:53.425906176 -0700
+++ 25-akpm/fs/ext3/balloc.c	2004-05-25 22:09:53.441903744 -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-05-25 22:09:53.427905872 -0700
+++ 25-akpm/fs/ext3/file.c	2004-05-25 22:09:53.441903744 -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-05-25 22:09:53.428905720 -0700
+++ 25-akpm/fs/ext3/ialloc.c	2004-05-25 22:09:53.442903592 -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-05-25 22:09:53.430905416 -0700
+++ 25-akpm/fs/ext3/inode.c	2004-05-25 22:09:53.450902376 -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);
 }
 
 /*
@@ -242,62 +240,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;
 }
 
@@ -965,38 +913,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);
@@ -2148,8 +2064,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().
@@ -2541,9 +2455,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-05-25 22:09:53.431905264 -0700
+++ 25-akpm/fs/ext3/xattr.c	2004-05-25 22:09:53.451902224 -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-05-25 22:09:53.436904504 -0700
+++ 25-akpm/include/linux/ext3_fs.h	2004-05-25 22:09:53.452902072 -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-05-25 22:09:53.437904352 -0700
+++ 25-akpm/include/linux/ext3_fs_i.h	2004-05-25 22:09:53.452902072 -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
 	/*
_
