LASSERT(desc->ld_active_tgt_count > 0);
desc->ld_active_tgt_count--;
- ltd->ltd_qos.lq_dirty = 1;
- ltd->ltd_qos.lq_rr.lqr_dirty = 1;
+ set_bit(LQ_DIRTY, <d->ltd_qos.lq_flags);
+ set_bit(LQ_DIRTY, <d->ltd_qos.lq_rr.lqr_flags);
CDEBUG(D_CONFIG, "%s: turns inactive\n",
tgt->ltd_exp->exp_obd->obd_name);
}
tgt->ltd_active = 1;
tgt->ltd_connecting = 0;
desc->ld_active_tgt_count++;
- ltd->ltd_qos.lq_dirty = 1;
- ltd->ltd_qos.lq_rr.lqr_dirty = 1;
+ set_bit(LQ_DIRTY, <d->ltd_qos.lq_flags);
+ set_bit(LQ_DIRTY, <d->ltd_qos.lq_rr.lqr_flags);
CDEBUG(D_CONFIG, "%s: turns active\n",
tgt->ltd_exp->exp_obd->obd_name);
}
if (tgt->ltd_statfs.os_bavail != avail)
/* recalculate weigths */
- ltd->ltd_qos.lq_dirty = 1;
+ set_bit(LQ_DIRTY, <d->ltd_qos.lq_flags);
}
obd->obd_osfs_age = ktime_get_seconds();
int rc;
ENTRY;
- if (!lqr->lqr_dirty) {
+ if (!test_bit(LQ_DIRTY, &lqr->lqr_flags)) {
LASSERT(lqr->lqr_pool.op_size);
RETURN(0);
}
* Check again. While we were sleeping on @lq_rw_sem something could
* change.
*/
- if (!lqr->lqr_dirty) {
+ if (!test_bit(LQ_DIRTY, &lqr->lqr_flags)) {
LASSERT(lqr->lqr_pool.op_size);
up_write(<d->ltd_qos.lq_rw_sem);
RETURN(0);
}
}
- lqr->lqr_dirty = 0;
+ clear_bit(LQ_DIRTY, &lqr->lqr_flags);
up_write(<d->ltd_qos.lq_rw_sem);
if (placed != real_count) {
LCONSOLE(D_WARNING, "rr #%d tgt idx=%d\n", i,
lqr->lqr_pool.op_array[i]);
}
- lqr->lqr_dirty = 1;
+ set_bit(LQ_DIRTY, &lqr->lqr_flags);
RETURN(-EAGAIN);
}
return false;
/* if the OSS has been used, check whether the OST has been used */
- if (!cfs_bitmap_check(lag->lag_ost_avoid_bitmap, index))
+ if (!test_bit(index, lag->lag_ost_avoid_bitmap))
used = false;
else
QOS_DEBUG("OST%d: been used in conflicting mirror component\n",
}
/* makes sense to rebalance next time */
- lod->lod_ost_descs.ltd_qos.lq_dirty = 1;
- lod->lod_ost_descs.ltd_qos.lq_same_space = 0;
-
+ set_bit(LQ_DIRTY, &lod->lod_ost_descs.ltd_qos.lq_flags);
+ clear_bit(LQ_SAME_SPACE, &lod->lod_ost_descs.ltd_qos.lq_flags);
rc = -EAGAIN;
}
}
/* makes sense to rebalance next time */
- ltd->ltd_qos.lq_dirty = 1;
- ltd->ltd_qos.lq_same_space = 0;
+ set_bit(LQ_DIRTY, <d->ltd_qos.lq_flags);
+ clear_bit(LQ_SAME_SPACE, <d->ltd_qos.lq_flags);
rc = -EAGAIN;
} else {
*
* \param[in] lod LOD device
* \param[in] lo The lod_object
+ * \param[in] comp_idx The component id, which the amount of stripes is
+ calculated for
* \param[in] stripe_count count the caller would like to use
*
* \retval the maximum usable stripe count
*/
__u16 lod_get_stripe_count(struct lod_device *lod, struct lod_object *lo,
- __u16 stripe_count, bool overstriping)
+ int comp_idx, __u16 stripe_count, bool overstriping)
{
__u32 max_stripes = LOV_MAX_STRIPE_COUNT_OLD;
/* max stripe count is based on OSD ea size */
unsigned int easize = lod->lod_osd_max_easize;
int i;
-
if (!stripe_count)
stripe_count =
lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_count;
lo->ldo_comp_cnt;
for (i = 0; i < lo->ldo_comp_cnt; i++) {
+ unsigned int stripes;
+
+ if (i == comp_idx)
+ continue;
+
lod_comp = &lo->ldo_comp_entries[i];
- comp_sz = lov_mds_md_size(lod_comp->llc_stripe_count,
- LOV_MAGIC_V3);
+ /* Extension comp is never inited - 0 stripes on disk */
+ stripes = lod_comp->llc_flags & LCME_FL_EXTENSION ? 0 :
+ lod_comp->llc_stripe_count;
+
+ comp_sz = lov_mds_md_size(stripes, LOV_MAGIC_V3);
total_comp_sz += comp_sz;
if (lod_comp->llc_flags & LCME_FL_INIT)
init_comp_sz += comp_sz;
{
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 cfs_bitmap *bitmap = NULL;
+ unsigned long *bitmap = NULL;
__u32 *new_oss = NULL;
lag->lag_ost_avail = lod->lod_ost_count;
/* init OST avoid guide bitmap */
if (lag->lag_ost_avoid_bitmap) {
- if (lod->lod_ost_count <= lag->lag_ost_avoid_bitmap->size) {
- CFS_RESET_BITMAP(lag->lag_ost_avoid_bitmap);
+ if (lod->lod_ost_count <= lag->lag_ost_avoid_size) {
+ bitmap_zero(lag->lag_ost_avoid_bitmap,
+ lag->lag_ost_avoid_size);
} else {
- CFS_FREE_BITMAP(lag->lag_ost_avoid_bitmap);
+ bitmap_free(lag->lag_ost_avoid_bitmap);
lag->lag_ost_avoid_bitmap = NULL;
}
}
if (!lag->lag_ost_avoid_bitmap) {
- bitmap = CFS_ALLOCATE_BITMAP(lod->lod_ost_count);
+ bitmap = bitmap_zalloc(lod->lod_ost_count, GFP_KERNEL);
if (!bitmap)
return -ENOMEM;
}
*/
OBD_ALLOC_PTR_ARRAY(new_oss, lod->lod_ost_count);
if (!new_oss) {
- CFS_FREE_BITMAP(bitmap);
+ bitmap_free(bitmap);
return -ENOMEM;
}
}
lag->lag_oss_avoid_array = new_oss;
lag->lag_oaa_size = lod->lod_ost_count;
}
- if (bitmap)
+ if (bitmap) {
lag->lag_ost_avoid_bitmap = bitmap;
+ lag->lag_ost_avoid_size = lod->lod_ost_count;
+ }
return 0;
}
{
struct lod_device *lod = lu2lod_dev(lo->ldo_obj.do_lu.lo_dev);
struct lod_layout_component *lod_comp = &lo->ldo_comp_entries[comp_idx];
- struct cfs_bitmap *bitmap = lag->lag_ost_avoid_bitmap;
+ unsigned long *bitmap = lag->lag_ost_avoid_bitmap;
int i, j;
/* iterate mirrors */
ost = OST_TGT(lod, comp->llc_ost_indices[j]);
lsq = ost->ltd_qos.ltq_svr;
- if (cfs_bitmap_check(bitmap, ost->ltd_index))
+ if (test_bit(ost->ltd_index, bitmap))
continue;
QOS_DEBUG("OST%d used in conflicting mirror "
"component\n", ost->ltd_index);
- cfs_bitmap_set(bitmap, ost->ltd_index);
+ set_bit(ost->ltd_index, bitmap);
lag->lag_ost_avail--;
for (k = 0; k < lag->lag_oaa_count; k++) {
* could be changed if some OSTs are [de]activated manually.
*/
lod_qos_statfs_update(env, d, &d->lod_ost_descs);
- stripe_len = lod_get_stripe_count(d, lo,
+ stripe_len = lod_get_stripe_count(d, lo, comp_idx,
lod_comp->llc_stripe_count,
lod_comp->llc_pattern &
LOV_PATTERN_OVERSTRIPING);