if (lod_comp->llc_flags & LCME_FL_NOSYNC)
lcme->lcme_timestamp =
cpu_to_le64(lod_comp->llc_timestamp);
+ if (lod_comp->llc_flags & LCME_FL_EXTENSION && !is_dir)
+ lcm->lcm_magic = cpu_to_le32(LOV_MAGIC_SEL);
+
lcme->lcme_extent.e_start =
cpu_to_le64(lod_comp->llc_extent.e_start);
lcme->lcme_extent.e_end =
magic = le32_to_cpu(lmm->lmm_magic);
if (magic != LOV_MAGIC_V1 && magic != LOV_MAGIC_V3 &&
- magic != LOV_MAGIC_COMP_V1 && magic != LOV_MAGIC_FOREIGN)
+ magic != LOV_MAGIC_COMP_V1 && magic != LOV_MAGIC_FOREIGN &&
+ magic != LOV_MAGIC_SEL)
GOTO(out, rc = -EINVAL);
if (lo->ldo_is_foreign)
else
lod_free_comp_entries(lo);
- if (magic == LOV_MAGIC_COMP_V1) {
+ if (magic == LOV_MAGIC_COMP_V1 || magic == LOV_MAGIC_SEL) {
comp_v1 = (struct lov_comp_md_v1 *)lmm;
comp_cnt = le16_to_cpu(comp_v1->lcm_entry_count);
if (comp_cnt == 0)
le32_to_cpu(comp_v1->lcm_entries[i].lcme_id);
if (lod_comp->llc_id == LCME_ID_INVAL)
GOTO(out, rc = -EINVAL);
+
+ if (comp_v1->lcm_entries[i].lcme_flags &
+ cpu_to_le32(LCME_FL_EXTENSION) &&
+ magic != LOV_MAGIC_SEL) {
+ struct lod_device *d =
+ lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
+
+ CDEBUG(D_WARNING, "%s: not SEL magic on SEL "
+ "file "DFID": %x\n",
+ lod2obd(d)->obd_name,
+ PFID(lod_object_fid(lo)), magic);
+ }
} else {
lod_comp_set_init(lod_comp);
}
INIT_LIST_HEAD(&lod->lod_qos.lq_svr_list);
init_rwsem(&lod->lod_qos.lq_rw_sem);
lod->lod_qos.lq_dirty = 1;
- lod->lod_qos.lq_rr.lqr_dirty = 1;
lod->lod_qos.lq_reset = 1;
/* Default priority is toward free space balance */
lod->lod_qos.lq_prio_free = 232;
/* Default threshold for rr (roughly 17%) */
lod->lod_qos.lq_threshold_rr = 43;
+ lu_qos_rr_init(&lod->lod_qos.lq_rr);
+
/* Set up OST pool environment */
lod->lod_pools_hash_body = cfs_hash_create("POOLS", HASH_POOLS_CUR_BITS,
HASH_POOLS_MAX_BITS,
rc = lod_ost_pool_init(&lod->lod_pool_info, 0);
if (rc)
GOTO(out_hash, rc);
- lod_qos_rr_init(&lod->lod_qos.lq_rr);
rc = lod_ost_pool_init(&lod->lod_qos.lq_rr.lqr_pool, 0);
if (rc)
GOTO(out_pool_info, rc);