Index: linux-2.6.7/fs/ext3/extents-in-ea.c =================================================================== --- linux-2.6.7.orig/fs/ext3/extents-in-ea.c 2004-08-13 08:58:28.000000000 +0800 +++ linux-2.6.7/fs/ext3/extents-in-ea.c 2004-08-13 08:58:34.000000000 +0800 @@ -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.6.7/fs/ext3/ioctl.c =================================================================== --- linux-2.6.7.orig/fs/ext3/ioctl.c 2004-08-13 08:58:28.000000000 +0800 +++ linux-2.6.7/fs/ext3/ioctl.c 2004-08-13 08:58:34.000000000 +0800 @@ -11,6 +11,7 @@ #include #include #include +#include #include #include