From: Mingming Cao <cmm@us.ibm.com>
To: Mingming Cao <cmm@us.ibm.com>
Cc: Andrew Morton <akpm@osdl.org>,
tytso@mit.edu, pbadari@us.ibm.com, linux-kernel@vger.kernel.org,
ext2-devel@lists.sourceforge.net
Subject: [PATCH 1/4] ext3 block reservation patch set -- ext3 preallocation cleanup
Date: 13 Apr 2004 17:54:51 -0700 [thread overview]
Message-ID: <1081904093.4714.6840.camel@localhost.localdomain> (raw)
In-Reply-To: <1081903949.3548.6837.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 502 bytes --]
> [patch 1]ext3_rsv_cleanup.patch: Cleans up the old ext3 preallocation
> code carried from ext2 but turned off.
diffstat ext3_rsv_cleanup.patch
fs/ext3/balloc.c | 3 -
fs/ext3/file.c | 2 -
fs/ext3/ialloc.c | 4 --
fs/ext3/inode.c | 91
----------------------------------------------
fs/ext3/xattr.c | 2 -
include/linux/ext3_fs.h | 9 ----
include/linux/ext3_fs_i.h | 4 --
7 files changed, 4 insertions(+), 111 deletions(-)
[-- Attachment #2: ext3_rsv_cleanup.patch --]
[-- Type: text/x-patch, Size: 7752 bytes --]
diff -urNp linux-2.6.4/fs/ext3/balloc.c 264-rsv-cleanup/fs/ext3/balloc.c
--- linux-2.6.4/fs/ext3/balloc.c 2004-03-10 18:55:21.000000000 -0800
+++ 264-rsv-cleanup/fs/ext3/balloc.c 2004-04-06 01:13:25.560544680 -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 -urNp linux-2.6.4/fs/ext3/file.c 264-rsv-cleanup/fs/ext3/file.c
--- linux-2.6.4/fs/ext3/file.c 2004-03-10 18:55:49.000000000 -0800
+++ 264-rsv-cleanup/fs/ext3/file.c 2004-04-06 01:12:49.136082040 -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 -urNp linux-2.6.4/fs/ext3/ialloc.c 264-rsv-cleanup/fs/ext3/ialloc.c
--- linux-2.6.4/fs/ext3/ialloc.c 2004-03-10 18:55:27.000000000 -0800
+++ 264-rsv-cleanup/fs/ext3/ialloc.c 2004-04-06 01:09:26.834836504 -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 -urNp linux-2.6.4/fs/ext3/inode.c 264-rsv-cleanup/fs/ext3/inode.c
--- linux-2.6.4/fs/ext3/inode.c 2004-03-10 18:55:35.000000000 -0800
+++ 264-rsv-cleanup/fs/ext3/inode.c 2004-04-06 01:13:44.307694680 -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);
@@ -2138,8 +2054,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().
@@ -2531,9 +2445,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 -urNp linux-2.6.4/fs/ext3/xattr.c 264-rsv-cleanup/fs/ext3/xattr.c
--- linux-2.6.4/fs/ext3/xattr.c 2004-03-10 18:55:28.000000000 -0800
+++ 264-rsv-cleanup/fs/ext3/xattr.c 2004-04-06 01:14:03.397792544 -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 -urNp linux-2.6.4/include/linux/ext3_fs.h 264-rsv-cleanup/include/linux/ext3_fs.h
--- linux-2.6.4/include/linux/ext3_fs.h 2004-03-10 18:55:33.000000000 -0800
+++ 264-rsv-cleanup/include/linux/ext3_fs.h 2004-04-06 01:15:11.343463232 -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 -urNp linux-2.6.4/include/linux/ext3_fs_i.h 264-rsv-cleanup/include/linux/ext3_fs_i.h
--- linux-2.6.4/include/linux/ext3_fs_i.h 2004-03-10 18:55:21.000000000 -0800
+++ 264-rsv-cleanup/include/linux/ext3_fs_i.h 2004-04-06 00:38:28.684318320 -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
/*
next prev parent reply other threads:[~2004-04-14 0:48 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200403190846.56955.pbadari@us.ibm.com>
[not found] ` <20040321015746.14b3c0dc.akpm@osdl.org>
2004-03-30 8:55 ` [RFC, PATCH] Reservation based ext3 preallocation Mingming Cao
2004-03-30 9:45 ` Andrew Morton
2004-03-30 17:07 ` Badari Pulavarty
2004-03-30 17:12 ` [Ext2-devel] " Alex Tomas
2004-03-30 18:07 ` Badari Pulavarty
2004-03-30 18:23 ` Mingming Cao
2004-03-30 18:36 ` Andrew Morton
2004-04-03 1:45 ` [Ext2-devel] " Mingming Cao
2004-04-03 1:50 ` Andrew Morton
2004-04-03 2:37 ` Mingming Cao
2004-04-03 2:50 ` Andrew Morton
2004-04-05 16:49 ` Mingming Cao
2004-04-14 0:52 ` [PATCH 0/4] ext3 block reservation patch set Mingming Cao
2004-04-14 0:54 ` Mingming Cao [this message]
2004-04-14 0:57 ` [PATCH 2/4] ext3 block reservation patch set --ext3 block reservation Mingming Cao
2004-04-14 0:58 ` [PATCH 3/4] ext3 block reservation patch set --mount and ioctl feature Mingming Cao
2004-04-14 1:00 ` [PATCH 4/4] ext3 block reservation patch set -- dynamically increase reservation window Mingming Cao
2004-04-14 2:47 ` [PATCH 0/4] ext3 block reservation patch set Andrew Morton
2004-04-14 16:11 ` Badari Pulavarty
2004-04-14 17:44 ` Mingming Cao
2004-04-14 23:02 ` Andrew Morton
2004-04-14 23:12 ` Badari Pulavarty
2004-04-14 16:42 ` Badari Pulavarty
2004-04-14 17:30 ` Mingming Cao
2004-04-14 23:07 ` Andrew Morton
2004-04-14 23:42 ` Mingming Cao
2004-04-21 23:34 ` [PATCH] Lazy discard ext3 reservation window patch Mingming Cao
2004-04-27 15:19 ` [PATCH 0/4] ext3 block reservation patch set Mary Edie Meredith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1081904093.4714.6840.camel@localhost.localdomain \
--to=cmm@us.ibm.com \
--cc=akpm@osdl.org \
--cc=ext2-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=pbadari@us.ibm.com \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox