@@ -59,9 +59,7 @@ static void marshal_clone_to_rele(struct dk_cxlflash_clone *clone,
static int ba_init(struct ba_lun *ba_lun)
{
struct ba_lun_info *bali = NULL;
- int lun_size_au = 0, i = 0;
- int last_word_underflow = 0;
- u64 *lam;
+ int lun_size_au = 0;
pr_debug("%s: Initializing LUN: lun_id=%016llx "
"ba_lun->lsize=%lx ba_lun->au_size=%lX\n",
@@ -100,20 +98,7 @@ static int ba_init(struct ba_lun *ba_lun)
/* Initialize the bit map size and set all bits to '1' */
bali->free_aun_cnt = lun_size_au;
-
- for (i = 0; i < bali->lun_bmap_size; i++)
- bali->lun_alloc_map[i] = 0xFFFFFFFFFFFFFFFFULL;
-
- /* If the last word not fully utilized, mark extra bits as allocated */
- last_word_underflow = (bali->lun_bmap_size * BITS_PER_LONG);
- last_word_underflow -= bali->free_aun_cnt;
- if (last_word_underflow > 0) {
- lam = &bali->lun_alloc_map[bali->lun_bmap_size - 1];
- for (i = (HIBIT - last_word_underflow + 1);
- i < BITS_PER_LONG;
- i++)
- clear_bit(i, (ulong *)lam);
- }
+ bitmap_set((ulong *)bali->lun_alloc_map, 0, bali->free_aun_cnt);
/* Initialize high elevator index, low/curr already at 0 from kzalloc */
bali->free_high_idx = bali->lun_bmap_size;
The 'lun_alloc_map' bitmap is zalloc'ed, so initially all its bits are zeroed. So use 'bitmap_set()' which will only set bits in the given range. The upper bits are left unmodified. (i.e. zero) This simplifies a lot the logic when initializing this bitmap. Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- The mix-up of 'unsigned long', BITS_PER_LONG, 'u64' and ULL is puzzling. I guess that 'struct ba_lun_info' and its 'u64 *lun_alloc_map' should remain as is because the file is also used outside Linux. I also guess that on the system that uses this driver, u64 = unsigned long. Finally, this is only partially compile tested because I don't have the needed cross-compiling tool chain. --- drivers/scsi/cxlflash/vlun.c | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-)