struct lfsck_component *com,
struct lfsck_request *lr)
{
- struct lfsck_thread_info *info = lfsck_env_info(env);
- struct lfsck_async_interpret_args *laia = &info->lti_laia;
- struct lfsck_instance *lfsck = com->lc_lfsck;
- struct lfsck_assistant_data *lad = com->lc_data;
- struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
- struct ptlrpc_request_set *set;
- struct lfsck_tgt_descs *ltds;
- struct lfsck_tgt_desc *ltd;
- struct lfsck_tgt_desc *next;
- __u32 idx;
- int rc = 0;
- int rc1 = 0;
- ENTRY;
+ struct lfsck_thread_info *info = lfsck_env_info(env);
+ struct lfsck_async_interpret_args *laia = &info->lti_laia;
+ struct lfsck_instance *lfsck = com->lc_lfsck;
+ struct lfsck_assistant_data *lad = com->lc_data;
+ struct lfsck_bookmark *bk = &lfsck->li_bookmark_ram;
+ struct ptlrpc_request_set *set;
+ struct lfsck_tgt_descs *ltds;
+ struct lfsck_tgt_desc *ltd;
+ struct lfsck_tgt_desc *next;
+ int idx;
+ int rc = 0;
+ int rc1 = 0;
+ ENTRY;
set = ptlrpc_prep_set();
if (set == NULL)
RETURN(-ENOMEM);
ltds = &lfsck->li_ost_descs;
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);
ltds = &lfsck->li_mdt_descs;
spin_lock(<ds->ltd_lock);
if (com->lc_type == LFSCK_TYPE_LAYOUT) {
- 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);
&lad->lad_mdt_phase1_list);
}
} else {
- 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);
struct lfsck_tgt_desc_idx *ltd_tgts_idx[TGT_PTRS];
/* bitmap of TGTs available */
- struct cfs_bitmap *ltd_tgts_bitmap;
+ unsigned long *ltd_tgts_bitmap;
+ u32 ltd_tgts_mask_len;
/* for lfsck_tgt_desc::ltd_xxx_list */
spinlock_t ltd_lock;
const struct lfsck_assistant_operations *lad_ops;
- struct cfs_bitmap *lad_bitmap;
+ unsigned long *lad_bitmap;
+ unsigned int lad_bitmap_count;
__u32 lad_touch_gen;
int lad_prefetched;
struct lfsck_component *com,
__u32 index)
{
- struct lfsck_assistant_data *lad = com->lc_data;
- struct cfs_bitmap *bitmap = lad->lad_bitmap;
+ struct lfsck_assistant_data *lad = com->lc_data;
+ unsigned long *bitmap = lad->lad_bitmap;
LASSERT(com->lc_lfsck->li_master);
- LASSERT(bitmap != NULL);
+ LASSERT(bitmap);
- if (likely(bitmap->size > index)) {
- cfs_bitmap_set(bitmap, index);
+ if (likely(lad->lad_bitmap_count > index)) {
+ set_bit(index, bitmap);
set_bit(LAD_INCOMPLETE, &lad->lad_flags);
} else if (com->lc_type == LFSCK_TYPE_NAMESPACE) {
struct lfsck_namespace *ns = com->lc_file_ram;
CDEBUG(D_LFSCK, "%s: %s LFSCK set bitmap (%p/%u) for idx %u\n",
lfsck_lfsck2name(com->lc_lfsck), lad->lad_name, bitmap,
- bitmap->size, index);
+ lad->lad_bitmap_count, index);
}
static inline int lfsck_links_read(const struct lu_env *env,
GOTO(out, rc = -ENOMEM);
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(lad->lad_bitmap, idx) {
+ for_each_set_bit(idx, lad->lad_bitmap, lad->lad_bitmap_count) {
ltd = lfsck_ltd2tgt(ltds, idx);
if (unlikely(!ltd))
continue;
static int lfsck_layout_load_bitmap(const struct lu_env *env,
struct lfsck_component *com)
{
- struct dt_object *obj = com->lc_obj;
- struct lfsck_assistant_data *lad = com->lc_data;
- struct lfsck_layout *lo = com->lc_file_ram;
- struct cfs_bitmap *bitmap = lad->lad_bitmap;
- loff_t pos = com->lc_file_size;
- ssize_t size;
- __u32 nbits;
- int rc;
- ENTRY;
+ struct dt_object *obj = com->lc_obj;
+ struct lfsck_assistant_data *lad = com->lc_data;
+ struct lfsck_layout *lo = com->lc_file_ram;
+ unsigned long *bitmap = lad->lad_bitmap;
+ loff_t pos = com->lc_file_size;
+ ssize_t size;
+ __u32 nbits;
+ int rc;
- if (com->lc_lfsck->li_ost_descs.ltd_tgts_bitmap->size >
- lo->ll_bitmap_size)
- nbits = com->lc_lfsck->li_ost_descs.ltd_tgts_bitmap->size;
+ ENTRY;
+ if (com->lc_lfsck->li_ost_descs.ltd_tgts_mask_len > lo->ll_bitmap_size)
+ nbits = com->lc_lfsck->li_ost_descs.ltd_tgts_mask_len;
else
nbits = lo->ll_bitmap_size;
if (unlikely(nbits < BITS_PER_LONG))
nbits = BITS_PER_LONG;
- if (nbits > bitmap->size) {
- __u32 new_bits = bitmap->size;
- struct cfs_bitmap *new_bitmap;
+ if (nbits > lad->lad_bitmap_count) {
+ u32 new_bits = lad->lad_bitmap_count;
+ unsigned long *new_bitmap;
while (new_bits < nbits)
new_bits <<= 1;
- new_bitmap = CFS_ALLOCATE_BITMAP(new_bits);
+ new_bitmap = bitmap_zalloc(new_bits, GFP_KERNEL);
if (new_bitmap == NULL)
RETURN(-ENOMEM);
lad->lad_bitmap = new_bitmap;
- CFS_FREE_BITMAP(bitmap);
+ lad->lad_bitmap_count = new_bits;
+ bitmap_free(bitmap);
bitmap = new_bitmap;
}
if (lo->ll_bitmap_size == 0) {
clear_bit(LAD_INCOMPLETE, &lad->lad_flags);
- CFS_RESET_BITMAP(bitmap);
-
+ bitmap_zero(bitmap, lad->lad_bitmap_count);
RETURN(0);
}
size = (lo->ll_bitmap_size + 7) >> 3;
- rc = dt_read(env, obj, lfsck_buf_get(env, bitmap->data, size), &pos);
+ rc = dt_read(env, obj, lfsck_buf_get(env, bitmap, size), &pos);
if (rc != size)
RETURN(rc >= 0 ? -EINVAL : rc);
- if (cfs_bitmap_check_empty(bitmap))
+ if (bitmap_empty(bitmap, lad->lad_bitmap_count))
clear_bit(LAD_INCOMPLETE, &lad->lad_flags);
else
set_bit(LAD_INCOMPLETE, &lad->lad_flags);
static int lfsck_layout_store(const struct lu_env *env,
struct lfsck_component *com)
{
- struct dt_object *obj = com->lc_obj;
- struct lfsck_instance *lfsck = com->lc_lfsck;
- struct lfsck_layout *lo_ram = com->lc_file_ram;
- struct lfsck_layout *lo = com->lc_file_disk;
- struct thandle *th;
- struct dt_device *dev = lfsck_obj2dev(obj);
- struct cfs_bitmap *bitmap = NULL;
- loff_t pos;
- ssize_t size = com->lc_file_size;
- __u32 nbits = 0;
- int rc;
- ENTRY;
+ struct dt_object *obj = com->lc_obj;
+ struct lfsck_instance *lfsck = com->lc_lfsck;
+ struct lfsck_layout *lo_ram = com->lc_file_ram;
+ struct lfsck_layout *lo = com->lc_file_disk;
+ struct thandle *th;
+ struct dt_device *dev = lfsck_obj2dev(obj);
+ unsigned long *bitmap = NULL;
+ loff_t pos;
+ ssize_t size = com->lc_file_size;
+ __u32 nbits = 0;
+ int rc;
+ ENTRY;
if (lfsck->li_master) {
struct lfsck_assistant_data *lad = com->lc_data;
bitmap = lad->lad_bitmap;
- nbits = bitmap->size;
+ nbits = lad->lad_bitmap_count;
LASSERT(nbits > 0);
LASSERTF((nbits & 7) == 0, "Invalid nbits %u\n", nbits);
if (bitmap != NULL) {
rc = dt_declare_record_write(env, obj,
- lfsck_buf_get(env, bitmap->data, nbits >> 3),
+ lfsck_buf_get(env, bitmap, nbits >> 3),
(loff_t)size, th);
if (rc != 0)
GOTO(out, rc);
if (bitmap != NULL) {
pos = size;
rc = dt_record_write(env, obj,
- lfsck_buf_get(env, bitmap->data, nbits >> 3),
+ lfsck_buf_get(env, bitmap, nbits >> 3),
&pos, th);
}
"scanning for OST%04x\n",
lfsck_lfsck2name(lfsck), ltd->ltd_index);
- if (cfs_bitmap_check(lad->lad_bitmap, ltd->ltd_index)) {
+ if (test_bit(ltd->ltd_index, lad->lad_bitmap)) {
CDEBUG(D_LFSCK, "%s: layout LFSCK assistant skip the orphan "
"scanning for OST%04x\n",
lfsck_lfsck2name(lfsck), ltd->ltd_index);
struct lfsck_assistant_data *lad = com->lc_data;
clear_bit(LAD_INCOMPLETE, &lad->lad_flags);
- CFS_RESET_BITMAP(lad->lad_bitmap);
+ bitmap_zero(lad->lad_bitmap, lad->lad_bitmap_count);
}
rc = lfsck_layout_store(env, com);
}
spin_unlock(<ds->ltd_lock);
- if (likely(lad->lad_bitmap != NULL))
- CFS_FREE_BITMAP(lad->lad_bitmap);
+ bitmap_free(lad->lad_bitmap);
OBD_FREE_PTR(lad);
}
ltds = &com->lc_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 = &com->lc_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);
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:
static int lfsck_namespace_load_bitmap(const struct lu_env *env,
struct lfsck_component *com)
{
- struct dt_object *obj = com->lc_obj;
- struct lfsck_assistant_data *lad = com->lc_data;
- struct lfsck_namespace *ns = com->lc_file_ram;
- struct cfs_bitmap *bitmap = lad->lad_bitmap;
- ssize_t size;
- __u32 nbits;
- int rc;
- ENTRY;
+ struct dt_object *obj = com->lc_obj;
+ struct lfsck_assistant_data *lad = com->lc_data;
+ struct lfsck_namespace *ns = com->lc_file_ram;
+ unsigned long *bitmap = lad->lad_bitmap;
+ ssize_t size;
+ __u32 nbits;
+ int rc;
- if (com->lc_lfsck->li_mdt_descs.ltd_tgts_bitmap->size >
+ ENTRY;
+ if (com->lc_lfsck->li_mdt_descs.ltd_tgts_mask_len >
ns->ln_bitmap_size)
- nbits = com->lc_lfsck->li_mdt_descs.ltd_tgts_bitmap->size;
+ nbits = com->lc_lfsck->li_mdt_descs.ltd_tgts_mask_len;
else
nbits = ns->ln_bitmap_size;
if (unlikely(nbits < BITS_PER_LONG))
nbits = BITS_PER_LONG;
- if (nbits > bitmap->size) {
- __u32 new_bits = bitmap->size;
- struct cfs_bitmap *new_bitmap;
+ if (nbits > lad->lad_bitmap_count) {
+ u32 new_bits = lad->lad_bitmap_count;
+ unsigned long *new_bitmap;
while (new_bits < nbits)
new_bits <<= 1;
- new_bitmap = CFS_ALLOCATE_BITMAP(new_bits);
+ new_bitmap = bitmap_zalloc(new_bits, GFP_KERNEL);
if (new_bitmap == NULL)
RETURN(-ENOMEM);
lad->lad_bitmap = new_bitmap;
- CFS_FREE_BITMAP(bitmap);
+ lad->lad_bitmap_count = new_bits;
+ bitmap_free(bitmap);
bitmap = new_bitmap;
}
if (ns->ln_bitmap_size == 0) {
clear_bit(LAD_INCOMPLETE, &lad->lad_flags);
- CFS_RESET_BITMAP(bitmap);
-
+ bitmap_zero(bitmap, lad->lad_bitmap_count);
RETURN(0);
}
size = (ns->ln_bitmap_size + 7) >> 3;
rc = dt_xattr_get(env, obj,
- lfsck_buf_get(env, bitmap->data, size),
+ lfsck_buf_get(env, bitmap, size),
XATTR_NAME_LFSCK_BITMAP);
if (rc != size)
RETURN(rc >= 0 ? -EINVAL : rc);
- if (cfs_bitmap_check_empty(bitmap))
+ if (bitmap_empty(bitmap, lad->lad_bitmap_count))
clear_bit(LAD_INCOMPLETE, &lad->lad_flags);
else
set_bit(LAD_INCOMPLETE, &lad->lad_flags);
static int lfsck_namespace_store(const struct lu_env *env,
struct lfsck_component *com)
{
- struct dt_object *obj = com->lc_obj;
- struct lfsck_instance *lfsck = com->lc_lfsck;
- struct lfsck_namespace *ns = com->lc_file_ram;
- struct lfsck_assistant_data *lad = com->lc_data;
- struct dt_device *dev = lfsck_obj2dev(obj);
- struct cfs_bitmap *bitmap = NULL;
- struct thandle *handle;
- __u32 nbits = 0;
- int len = com->lc_file_size;
- int rc;
- ENTRY;
+ struct dt_object *obj = com->lc_obj;
+ struct lfsck_instance *lfsck = com->lc_lfsck;
+ struct lfsck_namespace *ns = com->lc_file_ram;
+ struct lfsck_assistant_data *lad = com->lc_data;
+ struct dt_device *dev = lfsck_obj2dev(obj);
+ unsigned long *bitmap = NULL;
+ struct thandle *handle;
+ __u32 nbits = 0;
+ int len = com->lc_file_size;
+ int rc;
+ ENTRY;
if (lad != NULL) {
bitmap = lad->lad_bitmap;
- nbits = bitmap->size;
+ nbits = lad->lad_bitmap_count;
LASSERT(nbits > 0);
LASSERTF((nbits & 7) == 0, "Invalid nbits %u\n", nbits);
if (bitmap != NULL) {
rc = dt_declare_xattr_set(env, obj,
- lfsck_buf_get(env, bitmap->data, nbits >> 3),
+ lfsck_buf_get(env, bitmap, nbits >> 3),
XATTR_NAME_LFSCK_BITMAP, 0, handle);
if (rc != 0)
GOTO(out, rc);
XATTR_NAME_LFSCK_NAMESPACE, 0, handle);
if (rc == 0 && bitmap != NULL)
rc = dt_xattr_set(env, obj,
- lfsck_buf_get(env, bitmap->data, nbits >> 3),
+ lfsck_buf_get(env, bitmap, nbits >> 3),
XATTR_NAME_LFSCK_BITMAP, 0, handle);
GOTO(out, rc);
GOTO(out, rc);
clear_bit(LAD_INCOMPLETE, &lad->lad_flags);
- CFS_RESET_BITMAP(lad->lad_bitmap);
+ bitmap_zero(lad->lad_bitmap, lad->lad_bitmap_count);
rc = lfsck_namespace_store(env, com);
spin_unlock(<ds->ltd_lock);
if (likely(lad->lad_bitmap != NULL))
- CFS_FREE_BITMAP(lad->lad_bitmap);
+ bitmap_free(lad->lad_bitmap);
OBD_FREE_PTR(lad);
}
RETURN(rc);
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);
{
struct lfsck_async_interpret_args *laia =
&lfsck_env_info(env)->lti_laia2;
- struct lfsck_assistant_data *lad = com->lc_data;
- struct lfsck_namespace *ns = com->lc_file_ram;
- 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;
- __u32 idx;
- int rc = 0;
- ENTRY;
+ struct lfsck_assistant_data *lad = com->lc_data;
+ struct lfsck_namespace *ns = com->lc_file_ram;
+ 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 = 0;
+ ENTRY;
if (!test_bit(LAD_INCOMPLETE, &lad->lad_flags))
RETURN_EXIT;
lad->lad_touch_gen++;
down_read(<ds->ltd_rw_sem);
- cfs_foreach_bit(lad->lad_bitmap, idx) {
+ for_each_set_bit(idx, lad->lad_bitmap, lad->lad_bitmap_count) {
ltd = lfsck_ltd2tgt(ltds, idx);
if (unlikely(!ltd))
continue;