Index: linux-2.4.24/fs/ext3/extents-in-ea.c =================================================================== --- linux-2.4.24.orig/fs/ext3/extents-in-ea.c 2004-08-10 16:18:18.000000000 +0400 +++ linux-2.4.24/fs/ext3/extents-in-ea.c 2004-08-10 16:19:13.000000000 +0400 @@ -115,7 +115,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, @@ -173,7 +173,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) @@ -188,7 +188,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) { @@ -331,3 +331,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, EXT_MAX_BLOCK, + 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, EXT_MAX_BLOCK, + 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-10 16:10:10.000000000 +0400 +++ linux-2.4.24/fs/ext3/Makefile 2004-08-10 16:18:47.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-10 16:14:40.000000000 +0400 +++ linux-2.4.24/fs/ext3/ioctl.c 2004-08-10 16:18:47.000000000 +0400 @@ -11,6 +11,7 @@ #include #include #include +#include #include #include