param->ddp_mntopts |= MNTOPT_USERXATTR;
if (test_opt(sb, POSIX_ACL))
param->ddp_mntopts |= MNTOPT_ACL;
+
+#if defined(LDISKFS_FEATURE_INCOMPAT_EA_INODE)
+ if (LDISKFS_HAS_INCOMPAT_FEATURE(sb, LDISKFS_FEATURE_INCOMPAT_EA_INODE))
+ param->ddp_max_ea_size = LDISKFS_XATTR_MAX_LARGE_EA_SIZE;
+ else
+#endif
+ param->ddp_max_ea_size = sb->s_blocksize;
+
}
/**
struct osd_object *obj,
struct osd_directory *dir)
{
+ struct iam_container *bag = &dir->od_container;
int result;
- struct iam_container *bag;
- bag = &dir->od_container;
result = iam_container_init(bag, &dir->od_descr, obj->oo_inode);
- if (result == 0) {
- result = iam_container_setup(bag);
- if (result == 0)
- obj->oo_dt.do_index_ops = &osd_index_iam_ops;
- else
- iam_container_fini(bag);
+ if (result != 0)
+ return result;
+
+ result = iam_container_setup(bag);
+ if (result != 0)
+ goto out;
+
+ if (osd_obj2dev(obj)->od_iop_mode) {
+ u32 ptr = bag->ic_descr->id_ops->id_root_ptr(bag);
+
+ bag->ic_root_bh = ldiskfs_bread(NULL, obj->oo_inode,
+ ptr, 0, &result);
}
+
+ out:
+ if (result == 0)
+ obj->oo_dt.do_index_ops = &osd_index_iam_ops;
+ else
+ iam_container_fini(bag);
+
return result;
}