Whamcloud - gitweb
LU-12538 lod: Add missed qos_rr_init
[fs/lustre-release.git] / lustre / lod / lod_lov.c
index b60700c..bb8e3cf 100644 (file)
@@ -1013,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 =
@@ -1270,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)
@@ -1278,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)
@@ -1946,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));
@@ -2046,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);
@@ -2195,13 +2199,14 @@ int lod_pools_init(struct lod_device *lod, struct lustre_cfg *lcfg)
        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,
@@ -2218,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);