Now that modern Linux kernels support a bitmap API we can move
away from the libcfs specific bitmap API. This patch changes
the last bitmap in the lod module to use the Linux kernel
bitmap API.
Change-Id: I92c494bf2af62e31d7b9527b3f44580322e48fd3
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-on: https://review.whamcloud.com/39876
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
if (lag->lag_oss_avoid_array)
OBD_FREE_PTR_ARRAY(lag->lag_oss_avoid_array,
lag->lag_oaa_size);
if (lag->lag_oss_avoid_array)
OBD_FREE_PTR_ARRAY(lag->lag_oss_avoid_array,
lag->lag_oaa_size);
- if (lag->lag_ost_avoid_bitmap)
- CFS_FREE_BITMAP(lag->lag_ost_avoid_bitmap);
+ bitmap_free(lag->lag_ost_avoid_bitmap);
/* number of allocated array items */
unsigned int lag_oaa_size;
/* bitmap of OSTs avoid guidance */
/* number of allocated array items */
unsigned int lag_oaa_size;
/* bitmap of OSTs avoid guidance */
- struct cfs_bitmap *lag_ost_avoid_bitmap;
+ unsigned long *lag_ost_avoid_bitmap;
+ u32 lag_ost_avoid_size;
/* how many OSTs are available for alloc */
__u32 lag_ost_avail;
};
/* how many OSTs are available for alloc */
__u32 lag_ost_avail;
};
return false;
/* if the OSS has been used, check whether the OST has been used */
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",
used = false;
else
QOS_DEBUG("OST%d: been used in conflicting mirror component\n",
{
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 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;
__u32 *new_oss = NULL;
lag->lag_ost_avail = lod->lod_ost_count;
/* init OST avoid guide bitmap */
if (lag->lag_ost_avoid_bitmap) {
/* 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);
- 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) {
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;
}
if (!bitmap)
return -ENOMEM;
}
*/
OBD_ALLOC_PTR_ARRAY(new_oss, lod->lod_ost_count);
if (!new_oss) {
*/
OBD_ALLOC_PTR_ARRAY(new_oss, lod->lod_ost_count);
if (!new_oss) {
- CFS_FREE_BITMAP(bitmap);
lag->lag_oss_avoid_array = new_oss;
lag->lag_oaa_size = lod->lod_ost_count;
}
lag->lag_oss_avoid_array = new_oss;
lag->lag_oaa_size = lod->lod_ost_count;
}
lag->lag_ost_avoid_bitmap = bitmap;
lag->lag_ost_avoid_bitmap = bitmap;
+ lag->lag_ost_avoid_size = lod->lod_ost_count;
+ }
{
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 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 */
int i, j;
/* iterate mirrors */
ost = OST_TGT(lod, comp->llc_ost_indices[j]);
lsq = ost->ltd_qos.ltq_svr;
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);
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++) {
lag->lag_ost_avail--;
for (k = 0; k < lag->lag_oaa_count; k++) {