Source
256
256
header = part->header;
257
257
if ((xtrans != header.NumTransferUnits) ||
258
258
(xvalid+xtrans != le16_to_cpu(header.NumEraseUnits))) {
259
259
printk(KERN_NOTICE "ftl_cs: format error: erase units "
260
260
"don't add up!\n");
261
261
goto out_XferInfo;
262
262
}
263
263
264
264
/* Set up virtual page map */
265
265
blocks = le32_to_cpu(header.FormattedSize) >> header.BlockSize;
266
-
part->VirtualBlockMap = vmalloc(blocks * sizeof(uint32_t));
266
+
part->VirtualBlockMap = vmalloc(array_size(blocks, sizeof(uint32_t)));
267
267
if (!part->VirtualBlockMap)
268
268
goto out_XferInfo;
269
269
270
270
memset(part->VirtualBlockMap, 0xff, blocks * sizeof(uint32_t));
271
271
part->BlocksPerUnit = (1 << header.EraseUnitSize) >> header.BlockSize;
272
272
273
273
part->bam_cache = kmalloc_array(part->BlocksPerUnit, sizeof(uint32_t),
274
274
GFP_KERNEL);
275
275
if (!part->bam_cache)
276
276
goto out_VirtualBlockMap;