diff --git a/lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch b/lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch
index 89bac9c0be2b91136ad261f4018ea66763e74131..8d9b80f8cf79643fbb41f8a2151f3f9572fe296e 100644
--- a/lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch
+++ b/lustre/kernel_patches/patches/ext3-extents-in-ea-2.4.20.patch
@@ -1,8 +1,8 @@
-Index: linux-2.4.20/fs/ext3/extents-in-ea.c
+Index: linux-2.4.24/fs/ext3/extents-in-ea.c
 ===================================================================
---- linux-2.4.20.orig/fs/ext3/extents-in-ea.c	2004-05-06 23:03:39.000000000 -0700
-+++ linux-2.4.20/fs/ext3/extents-in-ea.c	2004-05-06 23:03:39.000000000 -0700
-@@ -0,0 +1,202 @@
+--- linux-2.4.24.orig/fs/ext3/extents-in-ea.c	2003-01-30 18:24:37.000000000 +0800
++++ linux-2.4.24/fs/ext3/extents-in-ea.c	2004-06-24 21:53:00.000000000 +0800
+@@ -0,0 +1,219 @@
 +/*
 + * Copyright (C) 2003 Alex Tomas <alex@clusterfs.com>
 + *
@@ -121,16 +121,31 @@ Index: linux-2.4.20/fs/ext3/extents-in-ea.c
 +			struct ext3_ext_path *path,
 +			struct ext3_extent *newex, int exist)
 +{
++	struct inode *inode = tree->inode;
 +	handle_t *handle;
 +	int needed, err;
++	unsigned long tgen;
 +
 +	if (exist)
 +		return EXT_CONTINUE;
 +
++	tgen = EXT_GENERATION(tree);
 +	needed = ext3_ext_calc_credits_for_insert(tree, path);
++	up_write(&EXT3_I(inode)->truncate_sem);
 +	handle = ext3_journal_start(tree->inode, needed + 10);
-+	if (IS_ERR(handle))
++	if (IS_ERR(handle)) {
++		down_write(&EXT3_I(inode)->truncate_sem);
 +		return PTR_ERR(handle);
++	}
++
++	if (tgen != EXT_GENERATION(tree)) {
++		/* the tree has changed. so path can be invalid at moment */
++		ext3_journal_stop(handle, inode);
++		down_write(&EXT3_I(inode)->truncate_sem);
++		return EXT_REPEAT;
++	}
++
++	down_write(&EXT3_I(inode)->truncate_sem);
 +
 +	/* insert new extent */
 +	newex->e_start = 0;
@@ -150,9 +165,11 @@ Index: linux-2.4.20/fs/ext3/extents-in-ea.c
 +
 +	err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname);
 +	if (err == 0) {
++		down_write(&EXT3_I(inode)->truncate_sem);	
 +		err = ext3_ext_walk_space(&tree, from, num,
 +						ext3_ext_in_ea_new_extent);
 +		ext3_release_tree_in_ea_desc(&tree);
++		up_write(&EXT3_I(inode)->truncate_sem);
 +	}
 +	return err;
 +}
@@ -205,10 +222,10 @@ Index: linux-2.4.20/fs/ext3/extents-in-ea.c
 +	return err;
 +}
 +
-Index: linux-2.4.20/fs/ext3/Makefile
+Index: linux-2.4.24/fs/ext3/Makefile
 ===================================================================
---- linux-2.4.20.orig/fs/ext3/Makefile	2004-05-06 23:02:11.000000000 -0700
-+++ linux-2.4.20/fs/ext3/Makefile	2004-05-06 23:03:39.000000000 -0700
+--- linux-2.4.24.orig/fs/ext3/Makefile	2004-06-09 11:31:06.000000000 +0800
++++ linux-2.4.24/fs/ext3/Makefile	2004-06-24 21:36:29.000000000 +0800
 @@ -19,7 +19,7 @@
  obj-m    := $(O_TARGET)
  
@@ -218,10 +235,10 @@ Index: linux-2.4.20/fs/ext3/Makefile
  obj-$(CONFIG_EXT3_FS_XATTR_USER) += xattr_user.o
  
  include $(TOPDIR)/Rules.make
-Index: linux-2.4.20/fs/ext3/xattr.c
+Index: linux-2.4.24/fs/ext3/xattr.c
 ===================================================================
---- linux-2.4.20.orig/fs/ext3/xattr.c	2004-05-06 23:02:11.000000000 -0700
-+++ linux-2.4.20/fs/ext3/xattr.c	2004-05-06 23:05:20.000000000 -0700
+--- linux-2.4.24.orig/fs/ext3/xattr.c	2004-06-09 11:31:06.000000000 +0800
++++ linux-2.4.24/fs/ext3/xattr.c	2004-06-24 21:36:29.000000000 +0800
 @@ -771,7 +771,8 @@
   */
  int
@@ -329,10 +346,10 @@ Index: linux-2.4.20/fs/ext3/xattr.c
  /*
   * ext3_xattr_block_set()
   *
-Index: linux-2.4.20/include/linux/ext3_xattr.h
+Index: linux-2.4.24/include/linux/ext3_xattr.h
 ===================================================================
---- linux-2.4.20.orig/include/linux/ext3_xattr.h	2004-05-06 23:02:11.000000000 -0700
-+++ linux-2.4.20/include/linux/ext3_xattr.h	2004-05-06 23:03:39.000000000 -0700
+--- linux-2.4.24.orig/include/linux/ext3_xattr.h	2004-06-09 11:31:06.000000000 +0800
++++ linux-2.4.24/include/linux/ext3_xattr.h	2004-06-24 21:36:29.000000000 +0800
 @@ -80,6 +80,7 @@
  extern int ext3_xattr_get(struct inode *, int, const char *, void *, size_t);
  extern int ext3_xattr_list(struct inode *, char *, size_t);