Merge tag 'mmc-v5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
[linux-2.6-microblaze.git] / drivers / memstick / core / ms_block.c
index ed9a683..ba84145 100644 (file)
@@ -1341,17 +1341,17 @@ static int msb_ftl_initialize(struct msb_data *msb)
        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;
        }
 
@@ -1946,7 +1946,8 @@ static DEFINE_MUTEX(msb_disk_lock); /* protects against races in open/release */
 static void msb_data_clear(struct msb_data *msb)
 {
        kfree(msb->boot_page);
-       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->cache);
        msb->card = NULL;
@@ -2243,8 +2244,8 @@ static int msb_resume(struct memstick_dev *card)
                goto out;
 
        if (msb->block_count != new_msb->block_count ||
-               memcmp(msb->used_blocks_bitmap, new_msb->used_blocks_bitmap,
-                                                       msb->block_count / 8))
+           !bitmap_equal(msb->used_blocks_bitmap, new_msb->used_blocks_bitmap,
+                                                       msb->block_count))
                goto out;
 
        card_dead = false;