msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
        msb->logical_block_count = msb->zone_count * 496 - 2;
 
-       msb->used_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
-       msb->erased_blocks_bitmap = kzalloc(msb->block_count / 8, GFP_KERNEL);
+       msb->used_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
+       msb->erased_blocks_bitmap = bitmap_zalloc(msb->block_count, GFP_KERNEL);
        msb->lba_to_pba_table =
                kmalloc_array(msb->logical_block_count, sizeof(u16),
                              GFP_KERNEL);
 
        if (!msb->used_blocks_bitmap || !msb->lba_to_pba_table ||
                                                !msb->erased_blocks_bitmap) {
-               kfree(msb->used_blocks_bitmap);
+               bitmap_free(msb->used_blocks_bitmap);
+               bitmap_free(msb->erased_blocks_bitmap);
                kfree(msb->lba_to_pba_table);
-               kfree(msb->erased_blocks_bitmap);
                return -ENOMEM;
        }
 
 static void msb_data_clear(struct msb_data *msb)
 {
        kfree(msb->boot_page);
-       kfree(msb->used_blocks_bitmap);
+       bitmap_free(msb->used_blocks_bitmap);
        kfree(msb->lba_to_pba_table);
        kfree(msb->cache);
        msb->card = NULL;