X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Flu_tgt_descs.c;h=22d79a182ff322883e1eca0b913daa5ebedc4535;hb=refs%2Fchanges%2F81%2F38981%2F3;hp=c7d8bbef7cf880ab90e0fd463d32b1262405bdc3;hpb=45222b2ef279d62ac3aab0e7babc55d77e3c93a2;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/lu_tgt_descs.c b/lustre/obdclass/lu_tgt_descs.c index c7d8bbe..22d79a1 100644 --- a/lustre/obdclass/lu_tgt_descs.c +++ b/lustre/obdclass/lu_tgt_descs.c @@ -110,10 +110,6 @@ int lu_qos_add_tgt(struct lu_qos *qos, struct lu_tgt_desc *tgt) ENTRY; - /* tgt not connected, this function will be called again later */ - if (!exp) - RETURN(0); - down_write(&qos->lq_rw_sem); /* * a bit hacky approach to learn NID of corresponding connection @@ -268,7 +264,7 @@ int lu_tgt_descs_init(struct lu_tgt_descs *ltd, bool is_mdt) * the tgt array and bitmap are allocated/grown dynamically as tgts are * added to the LOD/LMV, see lu_tgt_descs_add() */ - ltd->ltd_tgt_bitmap = CFS_ALLOCATE_BITMAP(BITS_PER_LONG); + ltd->ltd_tgt_bitmap = bitmap_zalloc(BITS_PER_LONG, GFP_NOFS); if (!ltd->ltd_tgt_bitmap) return -ENOMEM; @@ -286,6 +282,8 @@ int lu_tgt_descs_init(struct lu_tgt_descs *ltd, bool is_mdt) /* Default threshold for rr (roughly 17%) */ ltd->ltd_qos.lq_threshold_rr = 43; ltd->ltd_is_mdt = is_mdt; + if (is_mdt) + ltd->ltd_lmv_desc.ld_pattern = LMV_HASH_TYPE_DEFAULT; lu_qos_rr_init(<d->ltd_qos.lq_rr); @@ -302,7 +300,7 @@ void lu_tgt_descs_fini(struct lu_tgt_descs *ltd) { int i; - CFS_FREE_BITMAP(ltd->ltd_tgt_bitmap); + bitmap_free(ltd->ltd_tgt_bitmap); for (i = 0; i < TGT_PTRS; i++) { if (ltd->ltd_tgt_idx[i]) OBD_FREE_PTR(ltd->ltd_tgt_idx[i]); @@ -326,27 +324,27 @@ EXPORT_SYMBOL(lu_tgt_descs_fini); */ static int lu_tgt_descs_resize(struct lu_tgt_descs *ltd, __u32 newsize) { - struct cfs_bitmap *new_bitmap, *old_bitmap = NULL; + unsigned long *new_bitmap, *old_bitmap = NULL; /* someone else has already resize the array */ if (newsize <= ltd->ltd_tgts_size) return 0; - new_bitmap = CFS_ALLOCATE_BITMAP(newsize); + new_bitmap = bitmap_zalloc(newsize, GFP_NOFS); if (!new_bitmap) return -ENOMEM; if (ltd->ltd_tgts_size > 0) { /* the bitmap already exists, copy data from old one */ - cfs_bitmap_copy(new_bitmap, ltd->ltd_tgt_bitmap); + bitmap_copy(new_bitmap, ltd->ltd_tgt_bitmap, + ltd->ltd_tgts_size); old_bitmap = ltd->ltd_tgt_bitmap; } ltd->ltd_tgts_size = newsize; ltd->ltd_tgt_bitmap = new_bitmap; - if (old_bitmap) - CFS_FREE_BITMAP(old_bitmap); + bitmap_free(old_bitmap); CDEBUG(D_CONFIG, "tgt size: %d\n", ltd->ltd_tgts_size); @@ -383,7 +381,7 @@ int ltd_add_tgt(struct lu_tgt_descs *ltd, struct lu_tgt_desc *tgt) rc = lu_tgt_descs_resize(ltd, newsize); if (rc) RETURN(rc); - } else if (cfs_bitmap_check(ltd->ltd_tgt_bitmap, index)) { + } else if (test_bit(index, ltd->ltd_tgt_bitmap)) { RETURN(-EEXIST); } @@ -394,7 +392,7 @@ int ltd_add_tgt(struct lu_tgt_descs *ltd, struct lu_tgt_desc *tgt) } LTD_TGT(ltd, tgt->ltd_index) = tgt; - cfs_bitmap_set(ltd->ltd_tgt_bitmap, tgt->ltd_index); + set_bit(tgt->ltd_index, ltd->ltd_tgt_bitmap); ltd->ltd_lov_desc.ld_tgt_count++; if (tgt->ltd_active) @@ -411,7 +409,7 @@ void ltd_del_tgt(struct lu_tgt_descs *ltd, struct lu_tgt_desc *tgt) { lu_qos_del_tgt(<d->ltd_qos, tgt); LTD_TGT(ltd, tgt->ltd_index) = NULL; - cfs_bitmap_clear(ltd->ltd_tgt_bitmap, tgt->ltd_index); + clear_bit(tgt->ltd_index, ltd->ltd_tgt_bitmap); ltd->ltd_lov_desc.ld_tgt_count--; if (tgt->ltd_active) ltd->ltd_lov_desc.ld_active_tgt_count--; @@ -531,7 +529,7 @@ int ltd_qos_penalties_calc(struct lu_tgt_descs *ltd) * per-tgt penalty is * prio * bavail * iavail / (num_tgt - 1) / 2 */ - tgt->ltd_qos.ltq_penalty_per_obj = prio_wide * ba * ia; + tgt->ltd_qos.ltq_penalty_per_obj = prio_wide * ba * ia >> 8; do_div(tgt->ltd_qos.ltq_penalty_per_obj, num_active); tgt->ltd_qos.ltq_penalty_per_obj >>= 1; @@ -565,8 +563,9 @@ int ltd_qos_penalties_calc(struct lu_tgt_descs *ltd) list_for_each_entry(svr, &qos->lq_svr_list, lsq_svr_list) { ba = svr->lsq_bavail; ia = svr->lsq_iavail; - svr->lsq_penalty_per_obj = prio_wide * ba * ia; - do_div(ba, svr->lsq_tgt_count * num_active); + svr->lsq_penalty_per_obj = prio_wide * ba * ia >> 8; + do_div(svr->lsq_penalty_per_obj, + svr->lsq_tgt_count * num_active); svr->lsq_penalty_per_obj >>= 1; age = (now - svr->lsq_used) >> 3; @@ -661,6 +660,7 @@ int ltd_qos_update(struct lu_tgt_descs *ltd, struct lu_tgt_desc *tgt, if (!tgt->ltd_active) continue; + ltq = &tgt->ltd_qos; if (ltq->ltq_penalty < ltq->ltq_penalty_per_obj) ltq->ltq_penalty = 0; else @@ -672,9 +672,10 @@ int ltd_qos_update(struct lu_tgt_descs *ltd, struct lu_tgt_desc *tgt, if (ltq->ltq_usable) *total_wt += ltq->ltq_weight; - CDEBUG(D_OTHER, "recalc tgt %d usable=%d avail=%llu tgtppo=%llu tgtp=%llu svrppo=%llu svrp=%llu wt=%llu\n", + CDEBUG(D_OTHER, "recalc tgt %d usable=%d bavail=%llu ffree=%llu tgtppo=%llu tgtp=%llu svrppo=%llu svrp=%llu wt=%llu\n", tgt->ltd_index, ltq->ltq_usable, - tgt_statfs_bavail(tgt) >> 10, + tgt_statfs_bavail(tgt) >> 16, + tgt_statfs_iavail(tgt) >> 8, ltq->ltq_penalty_per_obj >> 10, ltq->ltq_penalty >> 10, ltq->ltq_svr->lsq_penalty_per_obj >> 10,