+ INIT_LIST_HEAD(&xattrs->mx_list);
+ xattrs->mx_namebuf.lb_buf = NULL;
+ xattrs->mx_namebuf.lb_len = 0;
+}
+
+static inline void mdd_xattrs_fini(struct mdd_xattrs *xattrs)
+{
+ struct mdd_xattr_entry *entry;
+ struct mdd_xattr_entry *tmp;
+
+ list_for_each_entry_safe(entry, tmp, &xattrs->mx_list, mxe_linkage) {
+ lu_buf_free(&entry->mxe_buf);
+ list_del(&entry->mxe_linkage);
+ OBD_FREE_PTR(entry);
+ }
+
+ lu_buf_free(&xattrs->mx_namebuf);
+}
+
+/* read xattrs into buf, but ignore LMA, LMV, and LINKEA if 'skip_linkea' is
+ * set.
+ */
+static int mdd_xattrs_migrate_prep(const struct lu_env *env,
+ struct mdd_xattrs *xattrs,
+ struct mdd_object *sobj,
+ bool skip_linkea)
+{
+ struct mdd_xattr_entry *entry;