Whamcloud - gitweb
LU-11158 mdt: grow lvb buffer to hold layout
[fs/lustre-release.git] / lustre / lod / lod_qos.c
index a309708..f840150 100644 (file)
@@ -830,47 +830,53 @@ static int lod_qos_is_ost_used(const struct lu_env *env, int ost, __u32 stripes)
        return 0;
 }
 
-/**
- * Check is OST used in a composite layout
- *
- * \param[in] inuse    all inuse ost indexs
- * \param[in] ost      OST target index to check
- *
- * \retval 0           not used
- * \retval 1           used
- */
-static inline int lod_comp_is_ost_used(struct ost_pool *inuse, int ost)
+static inline bool
+lod_obj_is_ost_use_skip_cb(const struct lu_env *env, struct lod_object *lo,
+                          int comp_idx, struct lod_obj_stripe_cb_data *data)
 {
-       __u32 j;
-       LASSERT(inuse != NULL);
+       struct lod_layout_component *comp = &lo->ldo_comp_entries[comp_idx];
 
-       if (inuse->op_size == 0)
-               return 0;
+       return comp->llc_ost_indices == NULL;
+}
 
-       LASSERT(inuse->op_count * sizeof(inuse->op_array[0]) <= inuse->op_size);
-       for (j = 0; j < inuse->op_count; j++) {
-               if (inuse->op_array[j] == ost)
-                       return 1;
+static inline int
+lod_obj_is_ost_use_cb(const struct lu_env *env, struct lod_object *lo,
+                     int comp_idx, struct lod_obj_stripe_cb_data *data)
+{
+       struct lod_layout_component *comp = &lo->ldo_comp_entries[comp_idx];
+       int i;
+
+       for (i = 0; i < comp->llc_stripe_count; i++) {
+               if (comp->llc_ost_indices[i] == data->locd_ost_index) {
+                       data->locd_ost_index = -1;
+                       return -EEXIST;
+               }
        }
+
        return 0;
 }
 
 /**
- * Mark the given target as used for a composite layout
+ * Check is OST used in a composite layout
  *
- * \param[in] inuse    inuse ost index array
- * \param[in] idx      index in the array
+ * \param[in] lo       lod object
+ * \param[in] ost      OST target index to check
+ *
+ * \retval false       not used
+ * \retval true                used
  */
-static inline void lod_comp_ost_in_use(struct ost_pool *inuse, int ost)
+static inline bool lod_comp_is_ost_used(const struct lu_env *env,
+                                      struct lod_object *lo, int ost)
 {
-       LASSERT(inuse != NULL);
-       if (inuse->op_size && !lod_comp_is_ost_used(inuse, ost)) {
-               LASSERTF(inuse->op_count * sizeof(inuse->op_array[0]) <
-                        inuse->op_size,
-                        "count %d size %u", inuse->op_count, inuse->op_size);
-               inuse->op_array[inuse->op_count] = ost;
-               inuse->op_count++;
-       }
+       struct lod_obj_stripe_cb_data data = { { 0 } };
+
+       data.locd_ost_index = ost;
+       data.locd_comp_skip_cb = lod_obj_is_ost_use_skip_cb;
+       data.locd_comp_cb = lod_obj_is_ost_use_cb;
+
+       (void)lod_obj_for_each_stripe(env, lo, NULL, &data);
+
+       return data.locd_ost_index == -1;
 }
 
 static inline void lod_avoid_update(struct lod_object *lo,
@@ -892,8 +898,11 @@ static inline bool lod_should_avoid_ost(struct lod_object *lo,
        bool used = false;
        int i;
 
-       if (!cfs_bitmap_check(lod->lod_ost_bitmap, index))
+       if (!cfs_bitmap_check(lod->lod_ost_bitmap, index)) {
+               QOS_DEBUG("OST%d: been used in conflicting mirror component\n",
+                         index);
                return true;
+       }
 
        /**
         * we've tried our best, all available OSTs have been used in
@@ -920,8 +929,8 @@ static inline bool lod_should_avoid_ost(struct lod_object *lo,
        if (!cfs_bitmap_check(lag->lag_ost_avoid_bitmap, index))
                used = false;
        else
-               QOS_DEBUG("OST%d: has been used in overlapped component "
-                         "in other mirror\n", index);
+               QOS_DEBUG("OST%d: been used in conflicting mirror component\n",
+                         index);
        return used;
 }
 
@@ -931,20 +940,18 @@ static int lod_check_and_reserve_ost(const struct lu_env *env,
                                     __u32 speed, __u32 *s_idx,
                                     struct dt_object **stripe,
                                     __u32 *ost_indices,
-                                    struct thandle *th,
-                                    struct ost_pool *inuse)
+                                    struct thandle *th)
 {
        struct lod_device *lod = lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
        struct lod_avoid_guide *lag = &lod_env_info(env)->lti_avoid;
        struct dt_object   *o;
        __u32 stripe_idx = *s_idx;
        int rc;
+       ENTRY;
 
        rc = lod_statfs_and_check(env, lod, ost_idx, sfs);
-       if (rc) {
-               /* this OSP doesn't feel well */
-               goto out_return;
-       }
+       if (rc)
+               RETURN(rc);
 
        /*
         * We expect number of precreated objects in f_ffree at
@@ -952,7 +959,7 @@ static int lod_check_and_reserve_ost(const struct lu_env *env,
         */
        if (sfs->os_fprecreated == 0 && speed == 0) {
                QOS_DEBUG("#%d: precreation is empty\n", ost_idx);
-               goto out_return;
+               RETURN(rc);
        }
 
        /*
@@ -960,16 +967,17 @@ static int lod_check_and_reserve_ost(const struct lu_env *env,
         */
        if (sfs->os_state & OS_STATE_DEGRADED && speed < 2) {
                QOS_DEBUG("#%d: degraded\n", ost_idx);
-               goto out_return;
+               RETURN(rc);
        }
 
        /*
         * try not allocate on OST which has been used by other
         * component
         */
-       if (speed == 0 && lod_comp_is_ost_used(inuse, ost_idx)) {
-               QOS_DEBUG("#%d: used by other component\n", ost_idx);
-               goto out_return;
+       if (speed == 0 && lod_comp_is_ost_used(env, lo, ost_idx)) {
+               QOS_DEBUG("iter %d: OST%d used by other component\n",
+                         speed, ost_idx);
+               RETURN(rc);
        }
 
        /**
@@ -977,22 +985,22 @@ static int lod_check_and_reserve_ost(const struct lu_env *env,
         * for the first and second time.
         */
        if (speed < 2 && lod_should_avoid_ost(lo, lag, ost_idx)) {
-               QOS_DEBUG("#%d: used by overlapped component of other mirror\n",
-                         ost_idx);
-               goto out_return;
+               QOS_DEBUG("iter %d: OST%d used by conflicting mirror "
+                         "component\n", speed, ost_idx);
+               RETURN(rc);
        }
        /*
         * do not put >1 objects on a single OST
         */
        if (lod_qos_is_ost_used(env, ost_idx, stripe_idx))
-               goto out_return;
+               RETURN(rc);
 
        o = lod_qos_declare_object_on(env, lod, ost_idx, th);
        if (IS_ERR(o)) {
                CDEBUG(D_OTHER, "can't declare new object on #%u: %d\n",
                       ost_idx, (int) PTR_ERR(o));
                rc = PTR_ERR(o);
-               goto out_return;
+               RETURN(rc);
        }
 
        /*
@@ -1000,15 +1008,13 @@ static int lod_check_and_reserve_ost(const struct lu_env *env,
         */
        lod_avoid_update(lo, lag);
        lod_qos_ost_in_use(env, stripe_idx, ost_idx);
-       lod_comp_ost_in_use(inuse, ost_idx);
        stripe[stripe_idx] = o;
        ost_indices[stripe_idx] = ost_idx;
        OBD_FAIL_TIMEOUT(OBD_FAIL_MDS_LOV_CREATE_RACE, 2);
        stripe_idx++;
        *s_idx = stripe_idx;
 
-out_return:
-       return rc;
+       RETURN(rc);
 }
 
 /**
@@ -1032,7 +1038,6 @@ out_return:
  * \param[in] flags            allocation flags (0 or LOV_USES_DEFAULT_STRIPE)
  * \param[in] th               transaction handle
  * \param[in] comp_idx         index of ldo_comp_entries
- * \param[in|out] inuse                array of inuse ost index
  *
  * \retval 0           on success
  * \retval -ENOSPC     if not enough OSTs are found
@@ -1040,8 +1045,7 @@ out_return:
  */
 static int lod_alloc_rr(const struct lu_env *env, struct lod_object *lo,
                        struct dt_object **stripe, __u32 *ost_indices,
-                       int flags, struct thandle *th, int comp_idx,
-                       struct ost_pool *inuse)
+                       int flags, struct thandle *th, int comp_idx)
 {
        struct lod_layout_component *lod_comp;
        struct lod_device *m = lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
@@ -1129,7 +1133,7 @@ repeat_find:
                spin_unlock(&lqr->lqr_alloc);
                rc = lod_check_and_reserve_ost(env, lo, sfs, ost_idx, speed,
                                               &stripe_idx, stripe, ost_indices,
-                                              th, inuse);
+                                              th);
                spin_lock(&lqr->lqr_alloc);
 
                if (rc != 0 && OST_TGT(m, ost_idx)->ltd_connecting)
@@ -1188,7 +1192,6 @@ out:
  * \param[out] ost_indices     ost indices of striping created
  * \param[in] th               transaction handle
  * \param[in] comp_idx         index of ldo_comp_entries
- * \param[in|out] inuse                array of inuse ost index
  *
  * \retval 0           on success
  * \retval -ENODEV     OST index does not exist on file system
@@ -1197,8 +1200,7 @@ out:
  */
 static int lod_alloc_ost_list(const struct lu_env *env, struct lod_object *lo,
                              struct dt_object **stripe, __u32 *ost_indices,
-                             struct thandle *th, int comp_idx,
-                             struct ost_pool *inuse)
+                             struct thandle *th, int comp_idx)
 {
        struct lod_layout_component *lod_comp;
        struct lod_device       *m = lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
@@ -1214,11 +1216,16 @@ static int lod_alloc_ost_list(const struct lu_env *env, struct lod_object *lo,
        LASSERT(lo->ldo_comp_cnt > comp_idx && lo->ldo_comp_entries != NULL);
        lod_comp = &lo->ldo_comp_entries[comp_idx];
        LASSERT(lod_comp->llc_ostlist.op_array);
+       LASSERT(lod_comp->llc_ostlist.op_count);
 
        rc = lod_qos_ost_in_use_clear(env, lod_comp->llc_stripe_count);
        if (rc < 0)
                RETURN(rc);
 
+       if (lod_comp->llc_stripe_offset == LOV_OFFSET_DEFAULT)
+               lod_comp->llc_stripe_offset =
+                               lod_comp->llc_ostlist.op_array[0];
+
        for (i = 0; i < lod_comp->llc_stripe_count; i++) {
                if (lod_comp->llc_ostlist.op_array[i] ==
                    lod_comp->llc_stripe_offset) {
@@ -1267,7 +1274,6 @@ static int lod_alloc_ost_list(const struct lu_env *env, struct lod_object *lo,
                 * We've successfully declared (reserved) an object
                 */
                lod_qos_ost_in_use(env, stripe_count, ost_idx);
-               lod_comp_ost_in_use(inuse, ost_idx);
                stripe[stripe_count] = o;
                ost_indices[stripe_count] = ost_idx;
                stripe_count++;
@@ -1295,7 +1301,6 @@ static int lod_alloc_ost_list(const struct lu_env *env, struct lod_object *lo,
  * \param[in] flags            not used
  * \param[in] th               transaction handle
  * \param[in] comp_idx         index of ldo_comp_entries
- * \param[in|out]inuse         array of inuse ost index
  *
  * \retval 0           on success
  * \retval -ENOSPC     if no OST objects are available at all
@@ -1305,8 +1310,7 @@ static int lod_alloc_ost_list(const struct lu_env *env, struct lod_object *lo,
  */
 static int lod_alloc_specific(const struct lu_env *env, struct lod_object *lo,
                              struct dt_object **stripe, __u32 *ost_indices,
-                             int flags, struct thandle *th, int comp_idx,
-                             struct ost_pool *inuse)
+                             int flags, struct thandle *th, int comp_idx)
 {
        struct lod_layout_component *lod_comp;
        struct lod_device *m = lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
@@ -1377,7 +1381,7 @@ repeat_find:
                 * try not allocate on the OST used by other component
                 */
                if (speed == 0 && i != 0 &&
-                   lod_comp_is_ost_used(inuse, ost_idx))
+                   lod_comp_is_ost_used(env, lo, ost_idx))
                        continue;
 
                /* Drop slow OSCs if we can, but not for requested start idx.
@@ -1411,7 +1415,6 @@ repeat_find:
                 * We've successfully declared (reserved) an object
                 */
                lod_qos_ost_in_use(env, stripe_num, ost_idx);
-               lod_comp_ost_in_use(inuse, ost_idx);
                stripe[stripe_num] = o;
                ost_indices[stripe_num] = ost_idx;
                stripe_num++;
@@ -1503,7 +1506,6 @@ static inline int lod_qos_is_usable(struct lod_device *lod)
  * \param[in] flags            0 or LOV_USES_DEFAULT_STRIPE
  * \param[in] th               transaction handle
  * \param[in] comp_idx         index of ldo_comp_entries
- * \param[in|out]inuse         array of inuse ost index
  *
  * \retval 0           on success
  * \retval -EAGAIN     not enough OSTs are found for specified stripe count
@@ -1512,8 +1514,7 @@ static inline int lod_qos_is_usable(struct lod_device *lod)
  */
 static int lod_alloc_qos(const struct lu_env *env, struct lod_object *lo,
                         struct dt_object **stripe, __u32 *ost_indices,
-                        int flags, struct thandle *th, int comp_idx,
-                        struct ost_pool *inuse)
+                        int flags, struct thandle *th, int comp_idx)
 {
        struct lod_layout_component *lod_comp;
        struct lod_device *lod = lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
@@ -1526,7 +1527,6 @@ static int lod_alloc_qos(const struct lu_env *env, struct lod_object *lo,
        struct ost_pool *osts;
        unsigned int i;
        __u32 nfound, good_osts, stripe_count, stripe_count_min;
-       __u32 inuse_old_count = inuse->op_count;
        int rc = 0;
        ENTRY;
 
@@ -1669,7 +1669,7 @@ static int lod_alloc_qos(const struct lu_env *env, struct lod_object *lo,
                         * do not put >1 objects on a single OST
                         */
                        if (lod_qos_is_ost_used(env, idx, nfound) ||
-                           lod_comp_is_ost_used(inuse, idx))
+                           lod_comp_is_ost_used(env, lo, idx))
                                continue;
 
                        o = lod_qos_declare_object_on(env, lod, idx, th);
@@ -1681,7 +1681,6 @@ static int lod_alloc_qos(const struct lu_env *env, struct lod_object *lo,
 
                        lod_avoid_update(lo, lag);
                        lod_qos_ost_in_use(env, nfound, idx);
-                       lod_comp_ost_in_use(inuse, idx);
                        stripe[nfound] = o;
                        ost_indices[nfound] = idx;
                        lod_qos_used(lod, osts, idx, &total_weight);
@@ -1711,9 +1710,6 @@ static int lod_alloc_qos(const struct lu_env *env, struct lod_object *lo,
                        dt_object_put(env, stripe[i]);
                        stripe[i] = NULL;
                }
-               LASSERTF(nfound <= inuse->op_count,
-                        "nfound:%d, op_count:%u\n", nfound, inuse->op_count);
-               inuse->op_count = inuse_old_count;
 
                /* makes sense to rebalance next time */
                lod->lod_qos.lq_dirty = 1;
@@ -1860,6 +1856,7 @@ int lod_use_defined_striping(const struct lu_env *env,
                if (mo->ldo_is_composite) {
                        offs = le32_to_cpu(comp_v1->lcm_entries[i].lcme_offset);
                        v1 = (struct lov_mds_md_v1 *)((char *)comp_v1 + offs);
+                       v3 = (struct lov_mds_md_v3 *)v1;
                        magic = le32_to_cpu(v1->lmm_magic);
 
                        ext = &comp_v1->lcm_entries[i].lcme_extent;
@@ -1868,6 +1865,9 @@ int lod_use_defined_striping(const struct lu_env *env,
                        lod_comp->llc_extent.e_end = le64_to_cpu(ext->e_end);
                        lod_comp->llc_flags =
                                le32_to_cpu(comp_v1->lcm_entries[i].lcme_flags);
+                       if (lod_comp->llc_flags & LCME_FL_NOSYNC)
+                               lod_comp->llc_timestamp = le64_to_cpu(
+                                       comp_v1->lcm_entries[i].lcme_timestamp);
                        lod_comp->llc_id =
                                le32_to_cpu(comp_v1->lcm_entries[i].lcme_id);
                        if (lod_comp->llc_id == LCME_ID_INVAL)
@@ -2052,30 +2052,14 @@ int lod_qos_parse_config(const struct lu_env *env, struct lod_object *lo,
                pool_name = NULL;
                if (v1->lmm_magic == LOV_USER_MAGIC_V3 ||
                    v1->lmm_magic == LOV_USER_MAGIC_SPECIFIC) {
-                       int j;
-
                        v3 = (struct lov_user_md_v3 *)v1;
                        if (v3->lmm_pool_name[0] != '\0')
                                pool_name = v3->lmm_pool_name;
 
                        if (v3->lmm_magic == LOV_USER_MAGIC_SPECIFIC) {
-                               if (v3->lmm_stripe_offset == LOV_OFFSET_DEFAULT)
-                                       v3->lmm_stripe_offset =
-                                               v3->lmm_objects[0].l_ost_idx;
-
-                               /* copy ost list from lmm */
-                               lod_comp->llc_ostlist.op_count =
-                                       v3->lmm_stripe_count;
-                               lod_comp->llc_ostlist.op_size =
-                                       v3->lmm_stripe_count * sizeof(__u32);
-                               OBD_ALLOC(lod_comp->llc_ostlist.op_array,
-                                         lod_comp->llc_ostlist.op_size);
-                               if (!lod_comp->llc_ostlist.op_array)
-                                       GOTO(free_comp, rc = -ENOMEM);
-
-                               for (j = 0; j < v3->lmm_stripe_count; j++)
-                                       lod_comp->llc_ostlist.op_array[j] =
-                                               v3->lmm_objects[j].l_ost_idx;
+                               rc = lod_comp_copy_ost_lists(lod_comp, v3);
+                               if (rc)
+                                       GOTO(free_comp, rc);
                        }
                }
 
@@ -2228,17 +2212,24 @@ void lod_collect_avoidance(struct lod_object *lo, struct lod_avoid_guide *lag,
                 * OSTs to read the data.
                 */
                comp = &lo->ldo_comp_entries[lo->ldo_mirrors[i].lme_start];
-               if (comp->llc_id == LCME_ID_INVAL ||
+               if (comp->llc_id != LCME_ID_INVAL &&
                    mirror_id_of(comp->llc_id) ==
                                                mirror_id_of(lod_comp->llc_id))
                        continue;
 
                /* iterate components of a mirror */
                lod_foreach_mirror_comp(comp, lo, i) {
-                       /* skip non-overlapped or un-instantiated components */
+                       /**
+                        * skip non-overlapped or un-instantiated components,
+                        * NOTE: don't use lod_comp_inited(comp) to judge
+                        * whether @comp has been inited, since during
+                        * declare phase, comp->llc_stripe has been allocated
+                        * while it's init flag not been set until the exec
+                        * phase.
+                        */
                        if (!lu_extent_is_overlapped(&comp->llc_extent,
                                                     &lod_comp->llc_extent) ||
-                           !lod_comp_inited(comp) || !comp->llc_stripe)
+                           !comp->llc_stripe)
                                continue;
 
                        /**
@@ -2256,6 +2247,8 @@ void lod_collect_avoidance(struct lod_object *lo, struct lod_avoid_guide *lag,
                                if (cfs_bitmap_check(bitmap, ost->ltd_index))
                                        continue;
 
+                               QOS_DEBUG("OST%d used in conflicting mirror "
+                                         "component\n", ost->ltd_index);
                                cfs_bitmap_set(bitmap, ost->ltd_index);
                                lag->lag_ost_avail--;
 
@@ -2288,14 +2281,13 @@ void lod_collect_avoidance(struct lod_object *lo, struct lod_avoid_guide *lag,
  * \param[in] attr     attributes OST objects will be declared with
  * \param[in] th       transaction handle
  * \param[in] comp_idx index of ldo_comp_entries
- * \param[in|out] inuse        array of inuse ost index
  *
  * \retval 0           on success
  * \retval negative    negated errno on error
  */
 int lod_qos_prep_create(const struct lu_env *env, struct lod_object *lo,
                        struct lu_attr *attr, struct thandle *th,
-                       int comp_idx, struct ost_pool *inuse)
+                       int comp_idx)
 {
        struct lod_layout_component *lod_comp;
        struct lod_device      *d = lu2lod_dev(lod2lu_obj(lo)->lo_dev);
@@ -2346,9 +2338,10 @@ int lod_qos_prep_create(const struct lu_env *env, struct lod_object *lo,
                CDEBUG(D_OTHER, "tgt_count %d stripe_count %d\n",
                                d->lod_desc.ld_tgt_count, stripe_len);
 
-               if (lod_comp->llc_ostlist.op_array) {
+               if (lod_comp->llc_ostlist.op_array &&
+                   lod_comp->llc_ostlist.op_count) {
                        rc = lod_alloc_ost_list(env, lo, stripe, ost_indices,
-                                               th, comp_idx, inuse);
+                                               th, comp_idx);
                } else if (lod_comp->llc_stripe_offset == LOV_OFFSET_DEFAULT) {
                        /**
                         * collect OSTs and OSSs used in other mirrors whose
@@ -2358,16 +2351,18 @@ int lod_qos_prep_create(const struct lu_env *env, struct lod_object *lo,
                        if (rc)
                                GOTO(put_ldts, rc);
 
+                       QOS_DEBUG("collecting conflict osts for comp[%d]\n",
+                                 comp_idx);
                        lod_collect_avoidance(lo, lag, comp_idx);
 
                        rc = lod_alloc_qos(env, lo, stripe, ost_indices, flag,
-                                          th, comp_idx, inuse);
+                                          th, comp_idx);
                        if (rc == -EAGAIN)
                                rc = lod_alloc_rr(env, lo, stripe, ost_indices,
-                                                 flag, th, comp_idx, inuse);
+                                                 flag, th, comp_idx);
                } else {
                        rc = lod_alloc_specific(env, lo, stripe, ost_indices,
-                                               flag, th, comp_idx, inuse);
+                                               flag, th, comp_idx);
                }
 put_ldts:
                lod_putref(d, &d->lod_ost_descs);
@@ -2419,95 +2414,12 @@ out:
        RETURN(rc);
 }
 
-int lod_obj_stripe_set_inuse_cb(const struct lu_env *env,
-                               struct lod_object *lo,
-                               struct dt_object *dt, struct thandle *th,
-                               int comp_idx, int stripe_idx,
-                               struct lod_obj_stripe_cb_data *data)
-{
-       struct lod_thread_info  *info = lod_env_info(env);
-       struct lod_device       *d = lu2lod_dev(lod2lu_obj(lo)->lo_dev);
-       struct lu_fid   *fid = &info->lti_fid;
-       __u32   index;
-       int     rc, type = LU_SEQ_RANGE_OST;
-
-       *fid = *lu_object_fid(&dt->do_lu);
-       rc = lod_fld_lookup(env, d, fid, &index, &type);
-       if (rc < 0) {
-               CERROR("%s: fail to locate "DFID": rc = %d\n",
-                      lod2obd(d)->obd_name, PFID(fid), rc);
-               return rc;
-       }
-       lod_comp_ost_in_use(data->locd_inuse, index);
-       return 0;
-}
-
-/**
- * Resize per-thread ost list to hold OST target index list already used.
- *
- * \param[in,out] inuse                structure contains ost list array
- * \param[in] cnt              total stripe count of all components
- * \param[in] max              array's max size if @max > 0
- *
- * \retval 0           on success
- * \retval -ENOMEM     reallocation failed
- */
-static int lod_inuse_resize(struct ost_pool *inuse, __u16 cnt, __u16 max)
-{
-       __u32 *array;
-       __u32 new = cnt * sizeof(inuse->op_array[0]);
-
-       inuse->op_count = 0;
-
-       if (new <= inuse->op_size)
-               return 0;
-
-       if (max)
-               new = min_t(__u32, new, max);
-
-       OBD_ALLOC(array, new);
-       if (!array)
-               return -ENOMEM;
-
-       if (inuse->op_array)
-               OBD_FREE(inuse->op_array, inuse->op_size);
-
-       inuse->op_array = array;
-       inuse->op_size = new;
-
-       return 0;
-}
-
-int lod_prepare_inuse(const struct lu_env *env, struct lod_object *lo)
-{
-       struct lod_thread_info *info = lod_env_info(env);
-       struct lod_device *d = lu2lod_dev(lod2lu_obj(lo)->lo_dev);
-       struct ost_pool *inuse = &info->lti_inuse_osts;
-       struct lod_obj_stripe_cb_data data = { { 0 } };
-       __u32 stripe_count = 0;
-       int i;
-       int rc;
-
-       for (i = 0; i < lo->ldo_comp_cnt; i++)
-               stripe_count += lod_comp_entry_stripe_count(lo,
-                                       &lo->ldo_comp_entries[i], false);
-       rc = lod_inuse_resize(inuse, stripe_count, d->lod_osd_max_easize);
-       if (rc)
-               return rc;
-
-       data.locd_inuse = inuse;
-       data.locd_stripe_cb = lod_obj_stripe_set_inuse_cb;
-       return lod_obj_for_each_stripe(env, lo, NULL, &data);
-}
-
 int lod_prepare_create(const struct lu_env *env, struct lod_object *lo,
                       struct lu_attr *attr, const struct lu_buf *buf,
                       struct thandle *th)
 
 {
-       struct lod_thread_info *info = lod_env_info(env);
        struct lod_device *d = lu2lod_dev(lod2lu_obj(lo)->lo_dev);
-       struct ost_pool *inuse = &info->lti_inuse_osts;
        uint64_t size = 0;
        int i;
        int rc;
@@ -2536,11 +2448,6 @@ int lod_prepare_create(const struct lu_env *env, struct lod_object *lo,
        if (attr->la_valid & LA_SIZE)
                size = attr->la_size;
 
-       /* prepare inuse */
-       rc = lod_prepare_inuse(env, lo);
-       if (rc)
-               RETURN(rc);
-
        /**
         * prepare OST object creation for the component covering file's
         * size, the 1st component (including plain layout file) is always
@@ -2552,10 +2459,9 @@ int lod_prepare_create(const struct lu_env *env, struct lod_object *lo,
 
                lod_comp = &lo->ldo_comp_entries[i];
                extent = &lod_comp->llc_extent;
-               CDEBUG(D_QOS, "%lld [%lld, %lld)\n",
-                      size, extent->e_start, extent->e_end);
+               QOS_DEBUG("comp[%d] %lld "DEXT"\n", i, size, PEXT(extent));
                if (!lo->ldo_is_composite || size >= extent->e_start) {
-                       rc = lod_qos_prep_create(env, lo, attr, th, i, inuse);
+                       rc = lod_qos_prep_create(env, lo, attr, th, i);
                        if (rc)
                                break;
                }