Index: iam/fs/ext3/Makefile
===================================================================
--- iam.orig/fs/ext3/Makefile 2006-05-31 20:24:32.000000000 +0400
-+++ iam/fs/ext3/Makefile 2006-07-20 18:33:52.000000000 +0400
++++ iam/fs/ext3/Makefile 2006-07-21 00:20:30.000000000 +0400
@@ -6,7 +6,7 @@ obj-$(CONFIG_EXT3_FS) += ext3.o
ext3-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \
Index: iam/fs/ext3/iam.c
===================================================================
--- iam.orig/fs/ext3/iam.c 2004-04-06 17:27:52.000000000 +0400
-+++ iam/fs/ext3/iam.c 2006-07-01 20:21:38.000000000 +0400
-@@ -0,0 +1,1262 @@
++++ iam/fs/ext3/iam.c 2006-07-20 19:36:04.000000000 +0400
+@@ -0,0 +1,1276 @@
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+ * vim:expandtab:shiftwidth=8:tabstop=8:
+ *
+ iam_path_init(&it->ii_path, c, pd);
+ return 0;
+}
++EXPORT_SYMBOL(iam_it_init);
+
+/*
+ * Finalize iterator and release all resources.
+ assert(it_state(it) == IAM_IT_DETACHED);
+ iam_path_fini(&it->ii_path);
+}
++EXPORT_SYMBOL(iam_it_fini);
+
+/*
+ * Performs tree top-to-bottom traversal starting from root, and loads leaf
+ assert(result != -ENOENT);
+ return result;
+}
++EXPORT_SYMBOL(iam_it_get);
+
+/*
+ * Attach iterator, and assure it points to the record (not skewed).
+ assert(ergo(result >= 0, it_state(it) == IAM_IT_ATTACHED));
+ return result;
+}
++EXPORT_SYMBOL(iam_it_get_at);
+
+/*
+ * Duplicates iterator.
+ iam_it_unlock(it);
+ }
+}
++EXPORT_SYMBOL(iam_it_put);
+
+/*
+ * Move iterator one record right.
+ assert(ergo(result > 0, it_state(it) == IAM_IT_DETACHED));
+ return result;
+}
++EXPORT_SYMBOL(iam_it_next);
+
+/*
+ * Return pointer to the record under iterator.
+ assert(it_at_rec(it));
+ return iam_leaf_rec(&it->ii_path.ip_leaf);
+}
++EXPORT_SYMBOL(iam_it_rec_get);
+
+static void iam_it_reccpy(struct iam_iterator *it, const struct iam_rec *r)
+{
+ }
+ return result;
+}
++EXPORT_SYMBOL(iam_it_rec_set);
+
+/*
+ * Return pointer to the key under iterator.
+ assert(it_at_rec(it));
+ return iam_leaf_key(&it->ii_path.ip_leaf);
+}
++EXPORT_SYMBOL(iam_it_key_get);
+
+/*
+ * Return size of key under iterator (in bytes)
+ assert(it_at_rec(it));
+ return iam_leaf_key_size(&it->ii_path.ip_leaf);
+}
++EXPORT_SYMBOL(iam_it_key_size);
+
+/*
+ * Insertion of new record. Interaction with jbd during non-trivial case (when
+ iam_it_container(it)->ic_descr->id_rec_size)));
+ return result;
+}
++EXPORT_SYMBOL(iam_it_rec_insert);
+
+/*
+ * Delete record under iterator.
+ it_state(it) == IAM_IT_DETACHED);
+ return result;
+}
++EXPORT_SYMBOL(iam_it_rec_delete);
+
+/*
+ * Convert iterator to cookie.
+ result = *(iam_pos_t *)iam_it_key_get(it);
+ return result;
+}
++EXPORT_SYMBOL(iam_it_store);
+
+/*
+ * Restore iterator from cookie.
+ assert(iam_it_container(it)->ic_descr->id_key_size <= sizeof pos);
+ return iam_it_get(it, (struct iam_key *)&pos);
+}
++EXPORT_SYMBOL(iam_it_load);
+
+/***********************************************************************/
+/* invariants */
Index: iam/include/linux/lustre_iam.h
===================================================================
--- iam.orig/include/linux/lustre_iam.h 2006-05-31 20:24:32.000000000 +0400
-+++ iam/include/linux/lustre_iam.h 2006-07-20 18:33:52.000000000 +0400
++++ iam/include/linux/lustre_iam.h 2006-07-21 00:20:30.000000000 +0400
@@ -1,9 +1,68 @@
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+ * vim:expandtab:shiftwidth=8:tabstop=8: