spin_lock_init(<ds->ltd_lock);
init_rwsem(<ds->ltd_rw_sem);
INIT_LIST_HEAD(<ds->ltd_orphan);
- ltds->ltd_tgts_bitmap = CFS_ALLOCATE_BITMAP(BITS_PER_LONG);
- if (ltds->ltd_tgts_bitmap == NULL)
+ ltds->ltd_tgts_bitmap = bitmap_zalloc(BITS_PER_LONG, GFP_KERNEL);
+ if (!ltds->ltd_tgts_bitmap)
return -ENOMEM;
return 0;
static void lfsck_tgt_descs_fini(struct lfsck_tgt_descs *ltds)
{
- struct lfsck_tgt_desc *ltd;
- struct lfsck_tgt_desc *next;
- int idx;
+ struct lfsck_tgt_desc *ltd;
+ struct lfsck_tgt_desc *next;
+ int idx;
down_write(<ds->ltd_rw_sem);
lfsck_tgt_put(ltd);
}
- if (unlikely(ltds->ltd_tgts_bitmap == NULL)) {
+ if (unlikely(!ltds->ltd_tgts_bitmap)) {
up_write(<ds->ltd_rw_sem);
return;
}
- cfs_foreach_bit(ltds->ltd_tgts_bitmap, idx) {
+ for_each_set_bit(idx, ltds->ltd_tgts_bitmap, ltds->ltd_tgts_mask_len) {
ltd = lfsck_ltd2tgt(ltds, idx);
if (likely(ltd != NULL)) {
LASSERT(list_empty(<d->ltd_layout_list));
LASSERT(list_empty(<d->ltd_namespace_phase_list));
ltds->ltd_tgtnr--;
- cfs_bitmap_clear(ltds->ltd_tgts_bitmap, idx);
+ clear_bit(idx, ltds->ltd_tgts_bitmap);
lfsck_assign_tgt(ltds, NULL, idx);
lfsck_tgt_put(ltd);
}
}
}
- CFS_FREE_BITMAP(ltds->ltd_tgts_bitmap);
+ bitmap_free(ltds->ltd_tgts_bitmap);
ltds->ltd_tgts_bitmap = NULL;
up_write(<ds->ltd_rw_sem);
}
if (!locked)
down_write(<ds->ltd_rw_sem);
- LASSERT(ltds->ltd_tgts_bitmap != NULL);
+ LASSERT(ltds->ltd_tgts_bitmap);
- if (index >= ltds->ltd_tgts_bitmap->size) {
- __u32 newsize = max((__u32)ltds->ltd_tgts_bitmap->size,
- (__u32)BITS_PER_LONG);
- struct cfs_bitmap *old_bitmap = ltds->ltd_tgts_bitmap;
- struct cfs_bitmap *new_bitmap;
+ if (index >= ltds->ltd_tgts_mask_len) {
+ u32 newsize = max_t(u32, ltds->ltd_tgts_mask_len,
+ BITS_PER_LONG);
+ unsigned long *old_bitmap = ltds->ltd_tgts_bitmap;
+ unsigned long *new_bitmap;
while (newsize < index + 1)
newsize <<= 1;
- new_bitmap = CFS_ALLOCATE_BITMAP(newsize);
- if (new_bitmap == NULL)
+ new_bitmap = bitmap_zalloc(newsize, GFP_KERNEL);
+ if (!new_bitmap)
GOTO(unlock, rc = -ENOMEM);
- if (ltds->ltd_tgtnr > 0)
- cfs_bitmap_copy(new_bitmap, old_bitmap);
+ if (ltds->ltd_tgtnr > 0) {
+ bitmap_copy(new_bitmap, old_bitmap,
+ ltds->ltd_tgts_mask_len);
+ }
ltds->ltd_tgts_bitmap = new_bitmap;
- CFS_FREE_BITMAP(old_bitmap);
+ ltds->ltd_tgts_mask_len = newsize;
+ bitmap_free(old_bitmap);
}
- if (cfs_bitmap_check(ltds->ltd_tgts_bitmap, index)) {
+ if (test_bit(index, ltds->ltd_tgts_bitmap)) {
CERROR("%s: the device %s (%u) is registered already\n",
lfsck_lfsck2name(lfsck),
ltd->ltd_tgt->dd_lu_dev.ld_obd->obd_name, index);
}
lfsck_assign_tgt(ltds, ltd, index);
- cfs_bitmap_set(ltds->ltd_tgts_bitmap, index);
+ set_bit(index, ltds->ltd_tgts_bitmap);
ltds->ltd_tgtnr++;
GOTO(unlock, rc = 0);
OBD_ALLOC_PTR(lad);
if (lad != NULL) {
- lad->lad_bitmap = CFS_ALLOCATE_BITMAP(BITS_PER_LONG);
+ lad->lad_bitmap = bitmap_zalloc(BITS_PER_LONG, GFP_KERNEL);
if (lad->lad_bitmap == NULL) {
OBD_FREE_PTR(lad);
return NULL;
}
+ lad->lad_bitmap_count = BITS_PER_LONG;
INIT_LIST_HEAD(&lad->lad_req_list);
spin_lock_init(&lad->lad_lock);
int lfsck_query_all(const struct lu_env *env, struct lfsck_component *com)
{
- struct lfsck_thread_info *info = lfsck_env_info(env);
- struct lfsck_request *lr = &info->lti_lr;
- struct lfsck_async_interpret_args *laia = &info->lti_laia;
- struct lfsck_instance *lfsck = com->lc_lfsck;
- struct lfsck_tgt_descs *ltds = &lfsck->li_mdt_descs;
- struct lfsck_tgt_desc *ltd;
- struct ptlrpc_request_set *set;
- int idx;
- int rc;
- ENTRY;
+ struct lfsck_thread_info *info = lfsck_env_info(env);
+ struct lfsck_request *lr = &info->lti_lr;
+ struct lfsck_async_interpret_args *laia = &info->lti_laia;
+ struct lfsck_instance *lfsck = com->lc_lfsck;
+ struct lfsck_tgt_descs *ltds = &lfsck->li_mdt_descs;
+ struct lfsck_tgt_desc *ltd;
+ struct ptlrpc_request_set *set;
+ int idx;
+ int rc;
+ ENTRY;
memset(lr, 0, sizeof(*lr));
lr->lr_event = LE_QUERY;
lr->lr_active = com->lc_type;
again:
laia->laia_ltds = ltds;
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(ltds->ltd_tgts_bitmap, idx) {
+ for_each_set_bit(idx, ltds->ltd_tgts_bitmap, ltds->ltd_tgts_mask_len) {
ltd = lfsck_tgt_get(ltds, idx);
LASSERT(ltd != NULL);
struct lfsck_instance *lfsck,
struct lfsck_stop *stop)
{
- struct lfsck_thread_info *info = lfsck_env_info(env);
- struct lfsck_request *lr = &info->lti_lr;
- struct lfsck_async_interpret_args *laia = &info->lti_laia;
- struct ptlrpc_request_set *set;
- struct lfsck_tgt_descs *ltds = &lfsck->li_mdt_descs;
- struct lfsck_tgt_desc *ltd;
- struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
- __u32 idx;
- int rc = 0;
- int rc1 = 0;
- ENTRY;
+ struct lfsck_thread_info *info = lfsck_env_info(env);
+ struct lfsck_request *lr = &info->lti_lr;
+ struct lfsck_async_interpret_args *laia = &info->lti_laia;
+ struct ptlrpc_request_set *set;
+ struct lfsck_tgt_descs *ltds = &lfsck->li_mdt_descs;
+ struct lfsck_tgt_desc *ltd;
+ struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
+ int idx;
+ int rc = 0;
+ int rc1 = 0;
+ ENTRY;
LASSERT(stop->ls_flags & LPF_BROADCAST);
set = ptlrpc_prep_set();
laia->laia_shared = 1;
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(ltds->ltd_tgts_bitmap, idx) {
+ for_each_set_bit(idx, ltds->ltd_tgts_bitmap, ltds->ltd_tgts_mask_len) {
ltd = lfsck_tgt_get(ltds, idx);
LASSERT(ltd != NULL);
struct lfsck_instance *lfsck,
struct lfsck_start *start)
{
- struct lfsck_thread_info *info = lfsck_env_info(env);
- struct lfsck_request *lr = &info->lti_lr;
- struct lfsck_async_interpret_args *laia = &info->lti_laia;
- struct ptlrpc_request_set *set;
- struct lfsck_tgt_descs *ltds = &lfsck->li_mdt_descs;
- struct lfsck_tgt_desc *ltd;
- struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
- __u32 idx;
- int rc = 0;
+ struct lfsck_thread_info *info = lfsck_env_info(env);
+ struct lfsck_request *lr = &info->lti_lr;
+ struct lfsck_async_interpret_args *laia = &info->lti_laia;
+ struct ptlrpc_request_set *set;
+ struct lfsck_tgt_descs *ltds = &lfsck->li_mdt_descs;
+ struct lfsck_tgt_desc *ltd;
+ struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
+ int idx;
+ int rc = 0;
bool retry = false;
ENTRY;
RETURN(-ENOMEM);
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(ltds->ltd_tgts_bitmap, idx) {
+ for_each_set_bit(idx, ltds->ltd_tgts_bitmap, ltds->ltd_tgts_mask_len) {
ltd = lfsck_tgt_get(ltds, idx);
LASSERT(ltd != NULL);
int lfsck_start(const struct lu_env *env, struct dt_device *key,
struct lfsck_start_param *lsp)
{
- struct lfsck_start *start = lsp->lsp_start;
- struct lfsck_instance *lfsck;
- struct lfsck_bookmark *bk;
- struct ptlrpc_thread *thread;
- struct lfsck_component *com;
- struct lfsck_thread_args *lta;
- struct task_struct *task;
- struct lfsck_tgt_descs *ltds;
- struct lfsck_tgt_desc *ltd;
- __u32 idx;
- int rc = 0;
- __u16 valid = 0;
- __u16 flags = 0;
- __u16 type = 1;
- ENTRY;
+ struct lfsck_start *start = lsp->lsp_start;
+ struct lfsck_instance *lfsck;
+ struct lfsck_bookmark *bk;
+ struct ptlrpc_thread *thread;
+ struct lfsck_component *com;
+ struct lfsck_thread_args *lta;
+ struct task_struct *task;
+ struct lfsck_tgt_descs *ltds;
+ struct lfsck_tgt_desc *ltd;
+ int idx;
+ int rc = 0;
+ __u16 valid = 0;
+ __u16 flags = 0;
+ __u16 type = 1;
+ ENTRY;
if (key->dd_rdonly)
RETURN(-EROFS);
ltds = &lfsck->li_mdt_descs;
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(ltds->ltd_tgts_bitmap, idx) {
+ for_each_set_bit(idx, ltds->ltd_tgts_bitmap, ltds->ltd_tgts_mask_len) {
ltd = lfsck_ltd2tgt(ltds, idx);
LASSERT(ltd != NULL);
ltds = &lfsck->li_ost_descs;
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(ltds->ltd_tgts_bitmap, idx) {
+ for_each_set_bit(idx, ltds->ltd_tgts_bitmap, ltds->ltd_tgts_mask_len) {
ltd = lfsck_ltd2tgt(ltds, idx);
LASSERT(ltd != NULL);
ltds = &lfsck->li_mdt_descs;
down_write(<ds->ltd_rw_sem);
- LASSERT(ltds->ltd_tgts_bitmap != NULL);
+ LASSERT(ltds->ltd_tgts_bitmap);
- if (unlikely(index >= ltds->ltd_tgts_bitmap->size))
+ if (unlikely(index >= ltds->ltd_tgts_mask_len))
goto unlock;
ltd = lfsck_ltd2tgt(ltds, index);
LASSERT(ltds->ltd_tgtnr > 0);
ltds->ltd_tgtnr--;
- cfs_bitmap_clear(ltds->ltd_tgts_bitmap, index);
+ set_bit(index, ltds->ltd_tgts_bitmap);
lfsck_assign_tgt(ltds, NULL, index);
unlock: