list_del(&tgt_desc->ltd_kill);
if (ltd == &lod->lod_ost_descs) {
/* remove from QoS structures */
- rc = qos_del_tgt(lod, tgt_desc);
+ rc = lqos_del_tgt(&lod->lod_qos, tgt_desc);
if (rc)
CERROR("%s: qos_del_tgt(%s) failed:"
"rc = %d\n",
GOTO(out_mutex, rc);
}
- rc = qos_add_tgt(lod, tgt_desc);
+ rc = lqos_add_tgt(&lod->lod_qos, tgt_desc);
if (rc) {
CERROR("%s: qos_add_tgt failed with %d\n",
obd->obd_name, rc);
{
__u32 round = size_roundup_power2(size);
- LASSERT(round <=
- lov_mds_md_size(LOV_MAX_STRIPE_COUNT, LOV_MAGIC_V3));
if (info->lti_ea_store) {
LASSERT(info->lti_ea_store_size);
LASSERT(info->lti_ea_store_size < round);
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)
+ 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)
}
pattern = le32_to_cpu(lmm->lmm_pattern);
- if (lov_pattern(pattern) != LOV_PATTERN_RAID0 &&
- lov_pattern(pattern) != LOV_PATTERN_MDT)
+ if (!lov_pattern_supported(lov_pattern(pattern)))
GOTO(out, rc = -EINVAL);
lod_comp->llc_pattern = pattern;
}
}
- if (rc < (typeof(rc))sizeof(struct lmv_mds_md_v1)) {
+ if (rc < (int)sizeof(struct lmv_mds_md_v1)) {
/* Let's set stripe_loaded to avoid further
* stripe loading especially for non-stripe directory,
* which can hurt performance. (See LU-9840)
for_each_comp_entry_v1(comp_v1, ent) {
ext = &ent->lcme_extent;
- if (le64_to_cpu(ext->e_start) >= le64_to_cpu(ext->e_end)) {
+ if (le64_to_cpu(ext->e_start) > le64_to_cpu(ext->e_end)) {
CDEBUG(D_LAYOUT, "invalid extent "DEXT"\n",
le64_to_cpu(ext->e_start),
le64_to_cpu(ext->e_end));
stripe_size = le32_to_cpu(lum->lmm_stripe_size);
if (stripe_size == 0)
stripe_size = desc->ld_default_stripe_size;
- if (stripe_size == 0 || (prev_end & (stripe_size - 1))) {
+ if (prev_end % stripe_size) {
CDEBUG(D_LAYOUT, "stripe size isn't aligned, "
"stripe_sz: %u, [%llu, %llu)\n",
stripe_size, ext->e_start, prev_end);
void lod_fix_desc_pattern(__u32 *val)
{
/* from lov_setstripe */
- if ((*val != 0) && (*val != LOV_PATTERN_RAID0) &&
- (*val != LOV_PATTERN_MDT)) {
- LCONSOLE_WARN("Unknown stripe pattern: %#x\n", *val);
+ if ((*val != 0) && !lov_pattern_supported_normal_comp(*val)) {
+ LCONSOLE_WARN("lod: Unknown stripe pattern: %#x\n", *val);
*val = 0;
}
}
lod->lod_sp_me = LUSTRE_SP_CLI;
/* Set up allocation policy (QoS and RR) */
- INIT_LIST_HEAD(&lod->lod_qos.lq_oss_list);
+ 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);