Whamcloud - gitweb
LU-12538 lod: Add missed qos_rr_init
[fs/lustre-release.git] / lustre / lod / lod_lov.c
index 3223e98..bb8e3cf 100644 (file)
@@ -111,7 +111,7 @@ void lod_putref(struct lod_device *lod, struct lod_tgt_descs *ltd)
                        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",
@@ -364,7 +364,7 @@ int lod_add_device(const struct lu_env *env, struct lod_device *lod,
                        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);
@@ -600,8 +600,6 @@ int lod_ea_store_resize(struct lod_thread_info *info, size_t size)
 {
        __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);
@@ -1015,6 +1013,9 @@ int lod_generate_lovea(const struct lu_env *env, struct lod_object *lo,
                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 =
@@ -1272,7 +1273,8 @@ int lod_parse_striping(const struct lu_env *env, struct lod_object *lo,
        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)
@@ -1280,7 +1282,7 @@ int lod_parse_striping(const struct lu_env *env, struct lod_object *lo,
        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)
@@ -1348,8 +1350,7 @@ int lod_parse_striping(const struct lu_env *env, struct lod_object *lo,
                }
 
                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;
@@ -1529,7 +1530,7 @@ int lod_striping_load(const struct lu_env *env, struct lod_object *lo)
                        }
                }
 
-               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)
@@ -1949,7 +1950,7 @@ recheck:
        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));
@@ -2049,7 +2050,7 @@ recheck:
                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);
@@ -2116,9 +2117,8 @@ void lod_fix_desc_stripe_count(__u32 *val)
 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;
        }
 }
@@ -2196,16 +2196,17 @@ int lod_pools_init(struct lod_device *lod, struct lustre_cfg *lcfg)
        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,
@@ -2222,7 +2223,6 @@ int lod_pools_init(struct lod_device *lod, struct lustre_cfg *lcfg)
        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);