}
out:
lo->ldo_stripe = stripe;
+ lo->ldo_dir_is_foreign = 0;
lo->ldo_dir_stripe_count = le32_to_cpu(lmv1->lmv_stripe_count);
lo->ldo_dir_stripes_allocated = le32_to_cpu(lmv1->lmv_stripe_count);
lo->ldo_dir_layout_version = le32_to_cpu(lmv1->lmv_layout_version);
OBD_FREE_PTR_ARRAY(lo->ldo_stripe,
lo->ldo_dir_stripes_allocated);
lo->ldo_stripe = stripes;
+ lo->ldo_dir_is_foreign = 0;
lo->ldo_dir_migrate_offset = lo->ldo_dir_stripe_count;
lo->ldo_dir_migrate_hash = le32_to_cpu(lmv->lmv_hash_type);
lo->ldo_dir_stripe_count += stripe_count;
OBD_FREE(lo->ldo_stripe,
sizeof(*stripes) * lo->ldo_dir_stripes_allocated);
lo->ldo_stripe = stripes;
+ lo->ldo_dir_is_foreign = 0;
lo->ldo_dir_striped = 1;
lo->ldo_dir_stripe_count = rc;
lo->ldo_dir_stripes_allocated = stripe_count;
void lod_striping_free_nolock(const struct lu_env *env, struct lod_object *lo)
{
struct lod_layout_component *lod_comp;
+ __u32 obj_attr = lo->ldo_obj.do_lu.lo_header->loh_attr;
int i, j;
- if (unlikely(lo->ldo_is_foreign)) {
+ if (S_ISREG(obj_attr) && unlikely(lo->ldo_is_foreign)) {
lod_free_foreign_lov(lo);
lo->ldo_comp_cached = 0;
- } else if (unlikely(lo->ldo_dir_is_foreign)) {
+ } else if (S_ISDIR(obj_attr) && unlikely(lo->ldo_dir_is_foreign)) {
lod_free_foreign_lmv(lo);
lo->ldo_dir_stripe_loaded = 0;
} else if (lo->ldo_stripe != NULL) {