+Index: linux-2.4.24/fs/ext3/extents-in-ea.c
+===================================================================
+--- linux-2.4.24.orig/fs/ext3/extents-in-ea.c 2004-08-06 02:59:02.000000000 +0400
++++ linux-2.4.24/fs/ext3/extents-in-ea.c 2004-08-06 02:59:15.000000000 +0400
+@@ -110,7 +110,7 @@
+ kfree(root);
+ return err;
+ }
+-
++EXPORT_SYMBOL(ext3_init_tree_in_ea);
+ static int
+ ext3_ext_in_ea_new_extent(struct ext3_extents_tree *tree,
+ struct ext3_ext_path *path,
+@@ -168,7 +168,7 @@
+ }
+ return err;
+ }
+-
++EXPORT_SYMBOL(ext3_ext_in_ea_alloc_space);
+ int ext3_ext_in_ea_remove_space(struct inode *inode, int name_index,
+ const char *eaname, unsigned long from,
+ unsigned long num)
+@@ -183,7 +183,7 @@
+ }
+ return err;
+ }
+-
++EXPORT_SYMBOL(ext3_ext_in_ea_remove_space);
+ int ext3_ext_in_ea_presence(struct inode *inode, int name_index,
+ const char *eaname, unsigned long block)
+ {
+@@ -326,3 +326,49 @@
+ return err;
+ }
+
++EXPORT_SYMBOL(ext3_ext_in_ea_ioctl);
++int ext3_ext_in_ea_get_extents(struct inode *inode, int name_index,
++ const char *eaname, char **buf, int *size)
++{
++ /*allocate the buffer and put the extents there*/
++ struct ext3_extents_tree tree;
++ struct ext3_extent_buf ex_buf;
++ int err;
++ err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname);
++ if (err)
++ goto out;
++ ex_buf.cur = *buf;
++ ex_buf.err = 0;
++ tree.private = &ex_buf;
++ ex_buf.start = 0;
++
++ err = ext3_ext_walk_space(&tree, ex_buf.start, 0xffffffff,
++ ext3_ext_store_extent_cb);
++ if (err == 0)
++ err = ex_buf.err;
++ ext3_release_tree_in_ea_desc(&tree);
++out:
++ return err;
++}
++EXPORT_SYMBOL(ext3_ext_in_ea_get_extents);
++int ext3_ext_in_ea_get_extents_num(struct inode *inode, int name_index,
++ const char *eaname, int *size)
++{
++ struct ext3_extents_tree tree;
++ struct ext3_extent_tree_stats stats_buf;
++ int err = 0, ext_num;
++ /*get extents number*/
++ err = ext3_init_tree_in_ea_desc(&tree, inode, name_index, eaname);
++ if (err)
++ return err;
++ tree.private = &stats_buf;
++ err = ext3_ext_walk_space(&tree, 0, 0xffffffff,
++ ext3_ext_collect_stats_cb);
++ ext_num = stats_buf.extents_num;
++ ext3_release_tree_in_ea_desc(&tree);
++
++ *size = ext_num * sizeof(struct ext3_extent);
++
++ return err;
++}
++EXPORT_SYMBOL(ext3_ext_in_ea_get_extents_num);
+Index: linux-2.4.24/fs/ext3/Makefile
+===================================================================
+--- linux-2.4.24.orig/fs/ext3/Makefile 2004-08-06 02:58:54.000000000 +0400
++++ linux-2.4.24/fs/ext3/Makefile 2004-08-06 02:59:15.000000000 +0400
+@@ -13,13 +13,16 @@
+
+ obj-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
+ ioctl.o namei.o super.o symlink.o hash.o ext3-exports.o \
+- xattr_trusted.o extents.o
++ xattr_trusted.o extents.o extents-in-ea.o
+ export-objs += extents.o
+
+ obj-m := $(O_TARGET)
+
+ export-objs += xattr.o
+-obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o extents-in-ea.o
++ifeq ($(CONFIG_EXT3_FS_XATTR),y)
++export-objs += extents-in-ea.o
++endif
++obj-$(CONFIG_EXT3_FS_XATTR) += xattr.o
+ obj-$(CONFIG_EXT3_FS_XATTR_USER) += xattr_user.o
+
+ include $(TOPDIR)/Rules.make
+Index: linux-2.4.24/fs/ext3/ioctl.c
+===================================================================
+--- linux-2.4.24.orig/fs/ext3/ioctl.c 2004-08-06 02:59:02.000000000 +0400
++++ linux-2.4.24/fs/ext3/ioctl.c 2004-08-06 02:59:15.000000000 +0400
+@@ -11,6 +11,7 @@
+ #include <linux/jbd.h>
+ #include <linux/ext3_fs.h>
+ #include <linux/ext3_jbd.h>
++#include <linux/ext3_extents.h>
+ #include <linux/sched.h>
+ #include <asm/uaccess.h>
+