+static int
+lod_qos_mdt_in_use_init(const struct lu_env *env,
+ const struct lu_tgt_descs *ltd,
+ u32 stripe_idx, u32 stripe_count,
+ const struct lu_tgt_pool *pool,
+ struct dt_object **stripes)
+{
+ u32 mdt_idx;
+ struct lu_tgt_desc *mdt;
+ int i, j;
+ int rc;
+
+ rc = lod_qos_tgt_in_use_clear(env, stripe_count);
+ if (rc)
+ return rc;
+
+ /* if stripe_idx > 1, we are splitting directory, mark existing stripes
+ * in_use. Because for either split or creation, stripe 0 is local,
+ * don't mark it in use.
+ */
+ for (i = 1; i < stripe_idx; i++) {
+ LASSERT(stripes[i]);
+ for (j = 0; j < pool->op_count; j++) {
+ mdt_idx = pool->op_array[j];
+
+ if (!cfs_bitmap_check(ltd->ltd_tgt_bitmap, mdt_idx))
+ continue;
+
+ mdt = LTD_TGT(ltd, mdt_idx);
+ if (&mdt->ltd_tgt->dd_lu_dev ==
+ stripes[i]->do_lu.lo_dev)
+ lod_qos_tgt_in_use(env, i, mdt_idx);
+ }
+ }
+
+ return 0;
+}
+