diff --git a/lustre/kernel_patches/patches/ext3-extents-2.4.20.patch b/lustre/kernel_patches/patches/ext3-extents-2.4.20.patch index b8106b32cbc656cb2b6be98f120997fc42c2482c..abe247da5ff6737e1ac9269fdd44bb8de29a5e12 100644 --- a/lustre/kernel_patches/patches/ext3-extents-2.4.20.patch +++ b/lustre/kernel_patches/patches/ext3-extents-2.4.20.patch @@ -1,8 +1,8 @@ Index: linux-2.4.24/fs/ext3/extents.c =================================================================== --- linux-2.4.24.orig/fs/ext3/extents.c 2003-01-30 13:24:37.000000000 +0300 -+++ linux-2.4.24/fs/ext3/extents.c 2004-01-29 16:18:31.000000000 +0300 -@@ -0,0 +1,2302 @@ ++++ linux-2.4.24/fs/ext3/extents.c 2004-01-30 19:26:55.000000000 +0300 +@@ -0,0 +1,2321 @@ +/* + * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com> + * @@ -1375,7 +1375,7 @@ Index: linux-2.4.24/fs/ext3/extents.c + ext_debug(tree, "index is empty, remove it, free block %d\n", + path->p_idx->e_leaf); + bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->e_leaf); -+ ext3_forget(handle, 0, tree->inode, bh, path->p_idx->e_leaf); ++ ext3_forget(handle, 1, tree->inode, bh, path->p_idx->e_leaf); + ext3_free_blocks(handle, tree->inode, path->p_idx->e_leaf, 1); + return err; +} @@ -1831,6 +1831,8 @@ Index: linux-2.4.24/fs/ext3/extents.c +{ + int needed = ext3_remove_blocks_credits(tree, ex, from, to); + handle_t *handle = ext3_journal_start(tree->inode, needed); ++ struct buffer_head *bh; ++ int i; + + if (IS_ERR(handle)) + return PTR_ERR(handle); @@ -1841,6 +1843,10 @@ Index: linux-2.4.24/fs/ext3/extents.c + start = ex->e_start + ex->e_num - num; + ext_debug(tree, "free last %lu blocks starting %lu\n", + num, start); ++ for (i = 0; i < num; i++) { ++ bh = sb_get_hash_table(tree->inode->i_sb, start + i); ++ ext3_forget(handle, 0, tree->inode, bh, start + i); ++ } + ext3_free_blocks(handle, tree->inode, start, num); + } else if (from == ex->e_block && to <= ex->e_block + ex->e_num - 1) { + printk("strange request: removal %lu-%lu from %u:%u\n", @@ -1934,11 +1940,13 @@ Index: linux-2.4.24/fs/ext3/extents.c + struct ext3_extent *newex, int exist) +{ + struct inode *inode = tree->inode; ++ struct buffer_head *bh; + int count, err, goal; -+ loff_t new_i_size; -+ handle_t *handle; + unsigned long pblock; + unsigned long tgen; ++ loff_t new_i_size; ++ handle_t *handle; ++ int i; + + if (exist) + return EXT_CONTINUE; @@ -1975,6 +1983,17 @@ Index: linux-2.4.24/fs/ext3/extents.c + if (err) + goto out; + ++ /* block have been allocated for data, so time to drop dirty ++ * in correspondend buffer_heads to prevent corruptions */ ++ for (i = 0; i < newex->e_num; i++) { ++ bh = sb_get_hash_table(inode->i_sb, newex->e_start + i); ++ if (bh) { ++ mark_buffer_clean(bh); ++ wait_on_buffer(bh); ++ clear_bit(BH_Req, &bh->b_state); ++ __brelse(bh); ++ } ++ } + + /* correct on-disk inode size */ + if (newex->e_num > 0) { @@ -2473,7 +2492,7 @@ Index: linux-2.4.24/fs/ext3/ioctl.c Index: linux-2.4.24/include/linux/ext3_fs.h =================================================================== --- linux-2.4.24.orig/include/linux/ext3_fs.h 2004-01-14 02:58:45.000000000 +0300 -+++ linux-2.4.24/include/linux/ext3_fs.h 2004-01-26 23:17:19.000000000 +0300 ++++ linux-2.4.24/include/linux/ext3_fs.h 2004-01-30 00:09:37.000000000 +0300 @@ -184,6 +184,7 @@ #define EXT3_IMAGIC_FL 0x00002000 /* AFS directory */ #define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */ @@ -2527,7 +2546,7 @@ Index: linux-2.4.24/include/linux/ext3_fs.h Index: linux-2.4.24/include/linux/ext3_extents.h =================================================================== --- linux-2.4.24.orig/include/linux/ext3_extents.h 2003-01-30 13:24:37.000000000 +0300 -+++ linux-2.4.24/include/linux/ext3_extents.h 2004-01-29 01:13:10.000000000 +0300 ++++ linux-2.4.24/include/linux/ext3_extents.h 2004-01-30 18:03:53.000000000 +0300 @@ -0,0 +1,216 @@ +/* + * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com> diff --git a/lustre/kernel_patches/patches/ext3-extents-2.4.21-suse2.patch b/lustre/kernel_patches/patches/ext3-extents-2.4.21-suse2.patch index 42f39f74783c611487b0fcf1b24ad59d7e5aef01..8bfe6708c40bc35cfc5c35623ed9c530876f9f59 100644 --- a/lustre/kernel_patches/patches/ext3-extents-2.4.21-suse2.patch +++ b/lustre/kernel_patches/patches/ext3-extents-2.4.21-suse2.patch @@ -1,8 +1,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c =================================================================== --- linux-2.4.21-suse2.orig/fs/ext3/extents.c 2003-01-30 13:24:37.000000000 +0300 -+++ linux-2.4.21-suse2/fs/ext3/extents.c 2004-01-29 16:27:55.000000000 +0300 -@@ -0,0 +1,2303 @@ ++++ linux-2.4.21-suse2/fs/ext3/extents.c 2004-01-30 19:29:16.000000000 +0300 +@@ -0,0 +1,2322 @@ +/* + * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com> + * @@ -1375,7 +1375,7 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c + ext_debug(tree, "index is empty, remove it, free block %d\n", + path->p_idx->e_leaf); + bh = sb_get_hash_table(tree->inode->i_sb, path->p_idx->e_leaf); -+ ext3_forget(handle, 0, tree->inode, bh, path->p_idx->e_leaf); ++ ext3_forget(handle, 1, tree->inode, bh, path->p_idx->e_leaf); + ext3_free_blocks(handle, tree->inode, path->p_idx->e_leaf, 1); + return err; +} @@ -1831,6 +1831,8 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c +{ + int needed = ext3_remove_blocks_credits(tree, ex, from, to); + handle_t *handle = ext3_journal_start(tree->inode, needed); ++ struct buffer_head *bh; ++ int i; + + if (IS_ERR(handle)) + return PTR_ERR(handle); @@ -1841,6 +1843,10 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c + start = ex->e_start + ex->e_num - num; + ext_debug(tree, "free last %lu blocks starting %lu\n", + num, start); ++ for (i = 0; i < num; i++) { ++ bh = sb_get_hash_table(tree->inode->i_sb, start + i); ++ ext3_forget(handle, 0, tree->inode, bh, start + i); ++ } + ext3_free_blocks(handle, tree->inode, start, num); + } else if (from == ex->e_block && to <= ex->e_block + ex->e_num - 1) { + printk("strange request: removal %lu-%lu from %u:%u\n", @@ -1934,11 +1940,13 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c + struct ext3_extent *newex, int exist) +{ + struct inode *inode = tree->inode; ++ struct buffer_head *bh; + int count, err, goal; -+ loff_t new_i_size; -+ handle_t *handle; + unsigned long pblock; + unsigned long tgen; ++ loff_t new_i_size; ++ handle_t *handle; ++ int i; + + if (exist) + return EXT_CONTINUE; @@ -1975,6 +1983,17 @@ Index: linux-2.4.21-suse2/fs/ext3/extents.c + if (err) + goto out; + ++ /* block have been allocated for data, so time to drop dirty ++ * in correspondend buffer_heads to prevent corruptions */ ++ for (i = 0; i < newex->e_num; i++) { ++ bh = sb_get_hash_table(inode->i_sb, newex->e_start + i); ++ if (bh) { ++ mark_buffer_clean(bh); ++ wait_on_buffer(bh); ++ clear_bit(BH_Req, &bh->b_state); ++ __brelse(bh); ++ } ++ } + + /* correct on-disk inode size */ + if (newex->e_num > 0) {