Commit bcb1d238716d138c9e16347fc32b3c1ae006339e
Committed by
David Woodhouse
1 parent
0dd5235f51
Exists in
master
and in
20 other branches
mtd: move zero length verification to MTD API functions
In many places in drivers we verify for the zero length, but this is very inconsistent across drivers. This is obviously the right thing to do, though. This patch moves the check to the MTD API functions instead and removes a lot of duplication. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Reviewed-by: Shmulik Ladkani <shmulik.ladkani@gmail.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Showing 13 changed files with 21 additions and 76 deletions Side-by-side Diff
- drivers/mtd/chips/cfi_cmdset_0001.c
- drivers/mtd/chips/cfi_cmdset_0002.c
- drivers/mtd/chips/cfi_cmdset_0020.c
- drivers/mtd/devices/block2mtd.c
- drivers/mtd/devices/lart.c
- drivers/mtd/devices/m25p80.c
- drivers/mtd/devices/mtd_dataflash.c
- drivers/mtd/devices/spear_smi.c
- drivers/mtd/devices/sst25l.c
- drivers/mtd/lpddr/lpddr_cmds.c
- drivers/mtd/maps/vmu-flash.c
- drivers/mtd/mtdcore.c
- drivers/mtd/nand/nand_base.c
drivers/mtd/chips/cfi_cmdset_0001.c
drivers/mtd/chips/cfi_cmdset_0002.c
... | ... | @@ -1246,9 +1246,6 @@ |
1246 | 1246 | unsigned long ofs, chipstart; |
1247 | 1247 | DECLARE_WAITQUEUE(wait, current); |
1248 | 1248 | |
1249 | - if (!len) | |
1250 | - return 0; | |
1251 | - | |
1252 | 1249 | chipnum = to >> cfi->chipshift; |
1253 | 1250 | ofs = to - (chipnum << cfi->chipshift); |
1254 | 1251 | chipstart = cfi->chips[chipnum].start; |
... | ... | @@ -1487,9 +1484,6 @@ |
1487 | 1484 | int chipnum; |
1488 | 1485 | unsigned long ofs; |
1489 | 1486 | |
1490 | - if (!len) | |
1491 | - return 0; | |
1492 | - | |
1493 | 1487 | chipnum = to >> cfi->chipshift; |
1494 | 1488 | ofs = to - (chipnum << cfi->chipshift); |
1495 | 1489 | |
... | ... | @@ -1696,9 +1690,6 @@ |
1696 | 1690 | unsigned long ofs, chipstart; |
1697 | 1691 | int ret = 0; |
1698 | 1692 | int chipnum; |
1699 | - | |
1700 | - if (!len) | |
1701 | - return 0; | |
1702 | 1693 | |
1703 | 1694 | chipnum = to >> cfi->chipshift; |
1704 | 1695 | ofs = to - (chipnum << cfi->chipshift); |
drivers/mtd/chips/cfi_cmdset_0020.c
drivers/mtd/devices/block2mtd.c
drivers/mtd/devices/lart.c
drivers/mtd/devices/m25p80.c
... | ... | @@ -346,10 +346,6 @@ |
346 | 346 | pr_debug("%s: %s from 0x%08x, len %zd\n", dev_name(&flash->spi->dev), |
347 | 347 | __func__, (u32)from, len); |
348 | 348 | |
349 | - /* sanity checks */ | |
350 | - if (!len) | |
351 | - return 0; | |
352 | - | |
353 | 349 | spi_message_init(&m); |
354 | 350 | memset(t, 0, (sizeof t)); |
355 | 351 | |
... | ... | @@ -408,10 +404,6 @@ |
408 | 404 | pr_debug("%s: %s to 0x%08x, len %zd\n", dev_name(&flash->spi->dev), |
409 | 405 | __func__, (u32)to, len); |
410 | 406 | |
411 | - /* sanity checks */ | |
412 | - if (!len) | |
413 | - return(0); | |
414 | - | |
415 | 407 | spi_message_init(&m); |
416 | 408 | memset(t, 0, (sizeof t)); |
417 | 409 | |
... | ... | @@ -494,10 +486,6 @@ |
494 | 486 | |
495 | 487 | pr_debug("%s: %s to 0x%08x, len %zd\n", dev_name(&flash->spi->dev), |
496 | 488 | __func__, (u32)to, len); |
497 | - | |
498 | - /* sanity checks */ | |
499 | - if (!len) | |
500 | - return 0; | |
501 | 489 | |
502 | 490 | spi_message_init(&m); |
503 | 491 | memset(t, 0, (sizeof t)); |
drivers/mtd/devices/mtd_dataflash.c
... | ... | @@ -249,10 +249,6 @@ |
249 | 249 | pr_debug("%s: read 0x%x..0x%x\n", dev_name(&priv->spi->dev), |
250 | 250 | (unsigned)from, (unsigned)(from + len)); |
251 | 251 | |
252 | - /* Sanity checks */ | |
253 | - if (!len) | |
254 | - return 0; | |
255 | - | |
256 | 252 | /* Calculate flash page/byte address */ |
257 | 253 | addr = (((unsigned)from / priv->page_size) << priv->page_offset) |
258 | 254 | + ((unsigned)from % priv->page_size); |
... | ... | @@ -321,10 +317,6 @@ |
321 | 317 | pr_debug("%s: write 0x%x..0x%x\n", |
322 | 318 | dev_name(&spi->dev), (unsigned)to, (unsigned)(to + len)); |
323 | 319 | |
324 | - /* Sanity checks */ | |
325 | - if (!len) | |
326 | - return 0; | |
327 | - | |
328 | 320 | spi_message_init(&msg); |
329 | 321 | |
330 | 322 | x[0].tx_buf = command = priv->command; |
... | ... | @@ -479,8 +471,6 @@ |
479 | 471 | |
480 | 472 | if ((off + len) > 64) |
481 | 473 | len = 64 - off; |
482 | - if (len == 0) | |
483 | - return len; | |
484 | 474 | |
485 | 475 | spi_message_init(&m); |
486 | 476 |
drivers/mtd/devices/spear_smi.c
... | ... | @@ -563,9 +563,6 @@ |
563 | 563 | u32 ctrlreg1, val; |
564 | 564 | int ret; |
565 | 565 | |
566 | - if (!len) | |
567 | - return 0; | |
568 | - | |
569 | 566 | if (!flash || !dev) |
570 | 567 | return -ENODEV; |
571 | 568 | |
... | ... | @@ -661,9 +658,6 @@ |
661 | 658 | |
662 | 659 | if (!flash || !dev) |
663 | 660 | return -ENODEV; |
664 | - | |
665 | - if (!len) | |
666 | - return 0; | |
667 | 661 | |
668 | 662 | if (flash->bank > dev->num_flashes - 1) { |
669 | 663 | dev_err(&dev->pdev->dev, "Invalid Bank Num"); |
drivers/mtd/devices/sst25l.c
... | ... | @@ -220,10 +220,6 @@ |
220 | 220 | unsigned char command[4]; |
221 | 221 | int ret; |
222 | 222 | |
223 | - /* Sanity checking */ | |
224 | - if (len == 0) | |
225 | - return 0; | |
226 | - | |
227 | 223 | spi_message_init(&message); |
228 | 224 | memset(&transfer, 0, sizeof(transfer)); |
229 | 225 | |
... | ... | @@ -264,10 +260,6 @@ |
264 | 260 | struct sst25l_flash *flash = to_sst25l_flash(mtd); |
265 | 261 | int i, j, ret, bytes, copied = 0; |
266 | 262 | unsigned char command[5]; |
267 | - | |
268 | - /* Sanity checks */ | |
269 | - if (!len) | |
270 | - return 0; | |
271 | 263 | |
272 | 264 | if ((uint32_t)to % mtd->writesize) |
273 | 265 | return -EINVAL; |
drivers/mtd/lpddr/lpddr_cmds.c
drivers/mtd/maps/vmu-flash.c
... | ... | @@ -360,9 +360,6 @@ |
360 | 360 | int index = 0, retval, partition, leftover, numblocks; |
361 | 361 | unsigned char cx; |
362 | 362 | |
363 | - if (len < 1) | |
364 | - return -EIO; | |
365 | - | |
366 | 363 | mpart = mtd->priv; |
367 | 364 | mdev = mpart->mdev; |
368 | 365 | partition = mpart->partition; |
... | ... | @@ -434,11 +431,6 @@ |
434 | 431 | partition = mpart->partition; |
435 | 432 | card = maple_get_drvdata(mdev); |
436 | 433 | |
437 | - /* simple sanity checks */ | |
438 | - if (len < 1) { | |
439 | - error = -EIO; | |
440 | - goto failed; | |
441 | - } | |
442 | 434 | numblocks = card->parts[partition].numblocks; |
443 | 435 | if (to + len > numblocks * card->blocklen) |
444 | 436 | len = numblocks * card->blocklen - to; |
drivers/mtd/mtdcore.c
... | ... | @@ -695,6 +695,11 @@ |
695 | 695 | return -EINVAL; |
696 | 696 | if (!(mtd->flags & MTD_WRITEABLE)) |
697 | 697 | return -EROFS; |
698 | + if (!instr->len) { | |
699 | + instr->state = MTD_ERASE_DONE; | |
700 | + mtd_erase_callback(instr); | |
701 | + return 0; | |
702 | + } | |
698 | 703 | return mtd->_erase(mtd, instr); |
699 | 704 | } |
700 | 705 | EXPORT_SYMBOL_GPL(mtd_erase); |
... | ... | @@ -713,6 +718,8 @@ |
713 | 718 | return -EOPNOTSUPP; |
714 | 719 | if (from < 0 || from > mtd->size || len > mtd->size - from) |
715 | 720 | return -EINVAL; |
721 | + if (!len) | |
722 | + return 0; | |
716 | 723 | return mtd->_point(mtd, from, len, retlen, virt, phys); |
717 | 724 | } |
718 | 725 | EXPORT_SYMBOL_GPL(mtd_point); |
... | ... | @@ -724,6 +731,8 @@ |
724 | 731 | return -EOPNOTSUPP; |
725 | 732 | if (from < 0 || from > mtd->size || len > mtd->size - from) |
726 | 733 | return -EINVAL; |
734 | + if (!len) | |
735 | + return 0; | |
727 | 736 | return mtd->_unpoint(mtd, from, len); |
728 | 737 | } |
729 | 738 | EXPORT_SYMBOL_GPL(mtd_unpoint); |
... | ... | @@ -750,6 +759,8 @@ |
750 | 759 | *retlen = 0; |
751 | 760 | if (from < 0 || from > mtd->size || len > mtd->size - from) |
752 | 761 | return -EINVAL; |
762 | + if (!len) | |
763 | + return 0; | |
753 | 764 | return mtd->_read(mtd, from, len, retlen, buf); |
754 | 765 | } |
755 | 766 | EXPORT_SYMBOL_GPL(mtd_read); |
... | ... | @@ -762,6 +773,8 @@ |
762 | 773 | return -EINVAL; |
763 | 774 | if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE)) |
764 | 775 | return -EROFS; |
776 | + if (!len) | |
777 | + return 0; | |
765 | 778 | return mtd->_write(mtd, to, len, retlen, buf); |
766 | 779 | } |
767 | 780 | EXPORT_SYMBOL_GPL(mtd_write); |
... | ... | @@ -783,6 +796,8 @@ |
783 | 796 | return -EINVAL; |
784 | 797 | if (!(mtd->flags & MTD_WRITEABLE)) |
785 | 798 | return -EROFS; |
799 | + if (!len) | |
800 | + return 0; | |
786 | 801 | return mtd->_panic_write(mtd, to, len, retlen, buf); |
787 | 802 | } |
788 | 803 | EXPORT_SYMBOL_GPL(mtd_panic_write); |
... | ... | @@ -794,6 +809,8 @@ |
794 | 809 | return -EOPNOTSUPP; |
795 | 810 | if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs) |
796 | 811 | return -EINVAL; |
812 | + if (!len) | |
813 | + return 0; | |
797 | 814 | return mtd->_lock(mtd, ofs, len); |
798 | 815 | } |
799 | 816 | EXPORT_SYMBOL_GPL(mtd_lock); |
... | ... | @@ -804,6 +821,8 @@ |
804 | 821 | return -EOPNOTSUPP; |
805 | 822 | if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs) |
806 | 823 | return -EINVAL; |
824 | + if (!len) | |
825 | + return 0; | |
807 | 826 | return mtd->_unlock(mtd, ofs, len); |
808 | 827 | } |
809 | 828 | EXPORT_SYMBOL_GPL(mtd_unlock); |
... | ... | @@ -814,6 +833,8 @@ |
814 | 833 | return -EOPNOTSUPP; |
815 | 834 | if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs) |
816 | 835 | return -EINVAL; |
836 | + if (!len) | |
837 | + return 0; | |
817 | 838 | return mtd->_is_locked(mtd, ofs, len); |
818 | 839 | } |
819 | 840 | EXPORT_SYMBOL_GPL(mtd_is_locked); |
drivers/mtd/nand/nand_base.c
... | ... | @@ -1614,9 +1614,6 @@ |
1614 | 1614 | struct mtd_oob_ops ops; |
1615 | 1615 | int ret; |
1616 | 1616 | |
1617 | - if (!len) | |
1618 | - return 0; | |
1619 | - | |
1620 | 1617 | nand_get_device(chip, mtd, FL_READING); |
1621 | 1618 | ops.len = len; |
1622 | 1619 | ops.datbuf = buf; |
... | ... | @@ -2313,10 +2310,6 @@ |
2313 | 2310 | struct mtd_oob_ops ops; |
2314 | 2311 | int ret; |
2315 | 2312 | |
2316 | - /* Do not allow reads past end of device */ | |
2317 | - if (!len) | |
2318 | - return 0; | |
2319 | - | |
2320 | 2313 | /* Wait for the device to get ready */ |
2321 | 2314 | panic_nand_wait(mtd, chip, 400); |
2322 | 2315 | |
... | ... | @@ -2350,9 +2343,6 @@ |
2350 | 2343 | struct nand_chip *chip = mtd->priv; |
2351 | 2344 | struct mtd_oob_ops ops; |
2352 | 2345 | int ret; |
2353 | - | |
2354 | - if (!len) | |
2355 | - return 0; | |
2356 | 2346 | |
2357 | 2347 | nand_get_device(chip, mtd, FL_WRITING); |
2358 | 2348 | ops.len = len; |