Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-9859 libcfs: move tgt_descs to standard Linux bitmaps.
[fs/lustre-release.git]
/
lustre
/
obdclass
/
lu_tgt_descs.c
diff --git
a/lustre/obdclass/lu_tgt_descs.c
b/lustre/obdclass/lu_tgt_descs.c
index
c7d8bbe
..
22d79a1
100644
(file)
--- 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;
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
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()
*/
* 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;
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;
/* 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);
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;
{
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]);
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)
{
*/
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;
/* 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 */
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;
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);
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);
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);
}
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;
}
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)
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;
{
lu_qos_del_tgt(<d->ltd_qos, tgt);
LTD_TGT(ltd, tgt->ltd_index) = NULL;
- c
fs_bitmap_clear(ltd->ltd_tgt_bitmap, tgt->ltd_index
);
+ c
lear_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--;
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
*/
* 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;
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;
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;
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;
if (!tgt->ltd_active)
continue;
+ ltq = &tgt->ltd_qos;
if (ltq->ltq_penalty < ltq->ltq_penalty_per_obj)
ltq->ltq_penalty = 0;
else
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;
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->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,
ltq->ltq_penalty_per_obj >> 10,
ltq->ltq_penalty >> 10,
ltq->ltq_svr->lsq_penalty_per_obj >> 10,