mtd: move zero length verification to MTD API functions
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Mon, 6 Feb 2012 11:27:43 +0000 (13:27 +0200)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 26 Mar 2012 23:32:19 +0000 (00:32 +0100)
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>
13 files changed:
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

index dc66df6ab58a20d93455886ccf4e9f35571852e4..2d9669047ed418b73e8c17ca2f35712bc63cb77c 100644 (file)
@@ -1566,9 +1566,6 @@ static int cfi_intelext_write_words (struct mtd_info *mtd, loff_t to , size_t le
        int chipnum;
        unsigned long ofs;
 
-       if (!len)
-               return 0;
-
        chipnum = to >> cfi->chipshift;
        ofs = to  - (chipnum << cfi->chipshift);
 
index a89d899efad4e5bcfba7b6ed4ff69b52f7ede977..c1d4624ce6e733fe097193799496c234f9da8764 100644 (file)
@@ -1246,9 +1246,6 @@ static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len,
        unsigned long ofs, chipstart;
        DECLARE_WAITQUEUE(wait, current);
 
-       if (!len)
-               return 0;
-
        chipnum = to >> cfi->chipshift;
        ofs = to  - (chipnum << cfi->chipshift);
        chipstart = cfi->chips[chipnum].start;
@@ -1487,9 +1484,6 @@ static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
        int chipnum;
        unsigned long ofs;
 
-       if (!len)
-               return 0;
-
        chipnum = to >> cfi->chipshift;
        ofs = to  - (chipnum << cfi->chipshift);
 
@@ -1697,9 +1691,6 @@ static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
        int ret = 0;
        int chipnum;
 
-       if (!len)
-               return 0;
-
        chipnum = to >> cfi->chipshift;
        ofs = to - (chipnum << cfi->chipshift);
        chipstart = cfi->chips[chipnum].start;
index d690b7d6952b530f272ae99991de7f8d6062c6a2..096993f9711e1176e907685001260c8aaa39ff5b 100644 (file)
@@ -615,9 +615,6 @@ static int cfi_staa_write_buffers (struct mtd_info *mtd, loff_t to,
        int chipnum;
        unsigned long ofs;
 
-       if (!len)
-               return 0;
-
        chipnum = to >> cfi->chipshift;
        ofs = to  - (chipnum << cfi->chipshift);
 
index ba2d74b01c7e7fd6b966dba103736be82626f981..a4a80b742e65e99d602161002dd4296614e8593d 100644 (file)
@@ -178,9 +178,6 @@ static int block2mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
        struct block2mtd_dev *dev = mtd->priv;
        int err;
 
-       if (!len)
-               return 0;
-
        mutex_lock(&dev->write_mutex);
        err = _block2mtd_write(dev, buf, to, len, retlen);
        mutex_unlock(&dev->write_mutex);
index 6fb8dba7695973195d8b08347528e48f3e15818c..82bd00af5cc3841ba6cd44ef51024b5792ba09b5 100644 (file)
@@ -437,9 +437,6 @@ static int flash_read (struct mtd_info *mtd,loff_t from,size_t len,size_t *retle
    printk (KERN_DEBUG "%s(from = 0x%.8x, len = %d)\n", __func__, (__u32)from, len);
 #endif
 
-   /* sanity checks */
-   if (!len) return (0);
-
    /* we always read len bytes */
    *retlen = len;
 
index 45cc4a1ae5b0292b1b88f303f1eef2d6767f5834..1924d247c1cb924c478ebd644475b799dd044297 100644 (file)
@@ -346,10 +346,6 @@ static int m25p80_read(struct mtd_info *mtd, loff_t from, size_t len,
        pr_debug("%s: %s from 0x%08x, len %zd\n", dev_name(&flash->spi->dev),
                        __func__, (u32)from, len);
 
-       /* sanity checks */
-       if (!len)
-               return 0;
-
        spi_message_init(&m);
        memset(t, 0, (sizeof t));
 
@@ -408,10 +404,6 @@ static int m25p80_write(struct mtd_info *mtd, loff_t to, size_t len,
        pr_debug("%s: %s to 0x%08x, len %zd\n", dev_name(&flash->spi->dev),
                        __func__, (u32)to, len);
 
-       /* sanity checks */
-       if (!len)
-               return(0);
-
        spi_message_init(&m);
        memset(t, 0, (sizeof t));
 
@@ -495,10 +487,6 @@ static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
        pr_debug("%s: %s to 0x%08x, len %zd\n", dev_name(&flash->spi->dev),
                        __func__, (u32)to, len);
 
-       /* sanity checks */
-       if (!len)
-               return 0;
-
        spi_message_init(&m);
        memset(t, 0, (sizeof t));
 
index c76b4464e8b9968dbeec0103585641f2635f70b6..928fb0e6d73a632c9a5522a03a5e6a07284a4c53 100644 (file)
@@ -249,10 +249,6 @@ static int dataflash_read(struct mtd_info *mtd, loff_t from, size_t len,
        pr_debug("%s: read 0x%x..0x%x\n", dev_name(&priv->spi->dev),
                        (unsigned)from, (unsigned)(from + len));
 
-       /* Sanity checks */
-       if (!len)
-               return 0;
-
        /* Calculate flash page/byte address */
        addr = (((unsigned)from / priv->page_size) << priv->page_offset)
                + ((unsigned)from % priv->page_size);
@@ -321,10 +317,6 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
        pr_debug("%s: write 0x%x..0x%x\n",
                dev_name(&spi->dev), (unsigned)to, (unsigned)(to + len));
 
-       /* Sanity checks */
-       if (!len)
-               return 0;
-
        spi_message_init(&msg);
 
        x[0].tx_buf = command = priv->command;
@@ -479,8 +471,6 @@ static ssize_t otp_read(struct spi_device *spi, unsigned base,
 
        if ((off + len) > 64)
                len = 64 - off;
-       if (len == 0)
-               return len;
 
        spi_message_init(&m);
 
index 2cdbcc65b39ff8ac6f803f70f2aa8c50e27176e6..f45dd37b771ec134540795ee523166bda7f66bb5 100644 (file)
@@ -563,9 +563,6 @@ static int spear_mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
        u32 ctrlreg1, val;
        int ret;
 
-       if (!len)
-               return 0;
-
        if (!flash || !dev)
                return -ENODEV;
 
@@ -662,9 +659,6 @@ static int spear_mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
        if (!flash || !dev)
                return -ENODEV;
 
-       if (!len)
-               return 0;
-
        if (flash->bank > dev->num_flashes - 1) {
                dev_err(&dev->pdev->dev, "Invalid Bank Num");
                return -EINVAL;
index 5c2613c99e4aac2cb58a6f72b059355ac04a2abc..51b2df33b8e9b3387d1d7863a6a3447f2bedaacd 100644 (file)
@@ -220,10 +220,6 @@ static int sst25l_read(struct mtd_info *mtd, loff_t from, size_t len,
        unsigned char command[4];
        int ret;
 
-       /* Sanity checking */
-       if (len == 0)
-               return 0;
-
        spi_message_init(&message);
        memset(&transfer, 0, sizeof(transfer));
 
@@ -265,10 +261,6 @@ static int sst25l_write(struct mtd_info *mtd, loff_t to, size_t len,
        int i, j, ret, bytes, copied = 0;
        unsigned char command[5];
 
-       /* Sanity checks */
-       if (!len)
-               return 0;
-
        if ((uint32_t)to % mtd->writesize)
                return -EINVAL;
 
index a92906ba535d46a5a4b300a6de286f9c866840ed..d3cfe26beeaa6bcc771a085f1e3f41d641af4c19 100644 (file)
@@ -639,7 +639,6 @@ static int lpddr_writev(struct mtd_info *mtd, const struct kvec *vecs,
        int chipnum;
        unsigned long ofs, vec_seek, i;
        int wbufsize = 1 << lpddr->qinfo->BufSizeShift;
-
        size_t len = 0;
 
        for (i = 0; i < count; i++)
index 48a803e2cd2edbd6cac48790201fd20e3fc3e9d5..2e2b0945edc7622159a3a2f8a1391d75c574eec8 100644 (file)
@@ -360,9 +360,6 @@ static int vmu_flash_read(struct mtd_info *mtd, loff_t from, size_t len,
        int index = 0, retval, partition, leftover, numblocks;
        unsigned char cx;
 
-       if (len < 1)
-               return -EIO;
-
        mpart = mtd->priv;
        mdev = mpart->mdev;
        partition = mpart->partition;
@@ -434,11 +431,6 @@ static int vmu_flash_write(struct mtd_info *mtd, loff_t to, size_t len,
        partition = mpart->partition;
        card = maple_get_drvdata(mdev);
 
-       /* simple sanity checks */
-       if (len < 1) {
-               error = -EIO;
-               goto failed;
-       }
        numblocks = card->parts[partition].numblocks;
        if (to + len > numblocks * card->blocklen)
                len = numblocks * card->blocklen - to;
index b20346e9fecb7dd47bb01d6732c2d3d5711b972c..6acc4fb254e27e9505dd93b8fc84c8c6daa055d6 100644 (file)
@@ -695,6 +695,11 @@ int mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
                return -EINVAL;
        if (!(mtd->flags & MTD_WRITEABLE))
                return -EROFS;
+       if (!instr->len) {
+               instr->state = MTD_ERASE_DONE;
+               mtd_erase_callback(instr);
+               return 0;
+       }
        return mtd->_erase(mtd, instr);
 }
 EXPORT_SYMBOL_GPL(mtd_erase);
@@ -713,6 +718,8 @@ int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
                return -EOPNOTSUPP;
        if (from < 0 || from > mtd->size || len > mtd->size - from)
                return -EINVAL;
+       if (!len)
+               return 0;
        return mtd->_point(mtd, from, len, retlen, virt, phys);
 }
 EXPORT_SYMBOL_GPL(mtd_point);
@@ -724,6 +731,8 @@ int mtd_unpoint(struct mtd_info *mtd, loff_t from, size_t len)
                return -EOPNOTSUPP;
        if (from < 0 || from > mtd->size || len > mtd->size - from)
                return -EINVAL;
+       if (!len)
+               return 0;
        return mtd->_unpoint(mtd, from, len);
 }
 EXPORT_SYMBOL_GPL(mtd_unpoint);
@@ -750,6 +759,8 @@ int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
        *retlen = 0;
        if (from < 0 || from > mtd->size || len > mtd->size - from)
                return -EINVAL;
+       if (!len)
+               return 0;
        return mtd->_read(mtd, from, len, retlen, buf);
 }
 EXPORT_SYMBOL_GPL(mtd_read);
@@ -762,6 +773,8 @@ int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
                return -EINVAL;
        if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE))
                return -EROFS;
+       if (!len)
+               return 0;
        return mtd->_write(mtd, to, len, retlen, buf);
 }
 EXPORT_SYMBOL_GPL(mtd_write);
@@ -783,6 +796,8 @@ int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
                return -EINVAL;
        if (!(mtd->flags & MTD_WRITEABLE))
                return -EROFS;
+       if (!len)
+               return 0;
        return mtd->_panic_write(mtd, to, len, retlen, buf);
 }
 EXPORT_SYMBOL_GPL(mtd_panic_write);
@@ -794,6 +809,8 @@ int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
                return -EOPNOTSUPP;
        if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs)
                return -EINVAL;
+       if (!len)
+               return 0;
        return mtd->_lock(mtd, ofs, len);
 }
 EXPORT_SYMBOL_GPL(mtd_lock);
@@ -804,6 +821,8 @@ int mtd_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
                return -EOPNOTSUPP;
        if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs)
                return -EINVAL;
+       if (!len)
+               return 0;
        return mtd->_unlock(mtd, ofs, len);
 }
 EXPORT_SYMBOL_GPL(mtd_unlock);
@@ -814,6 +833,8 @@ int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
                return -EOPNOTSUPP;
        if (ofs < 0 || ofs > mtd->size || len > mtd->size - ofs)
                return -EINVAL;
+       if (!len)
+               return 0;
        return mtd->_is_locked(mtd, ofs, len);
 }
 EXPORT_SYMBOL_GPL(mtd_is_locked);
index dd182c8591a90cdd2084099a478b957bf644fda9..5822e3a47ded36ba79c1e30c8ffecf0e13628f6c 100644 (file)
@@ -1614,9 +1614,6 @@ static int nand_read(struct mtd_info *mtd, loff_t from, size_t len,
        struct mtd_oob_ops ops;
        int ret;
 
-       if (!len)
-               return 0;
-
        nand_get_device(chip, mtd, FL_READING);
        ops.len = len;
        ops.datbuf = buf;
@@ -2313,10 +2310,6 @@ static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
        struct mtd_oob_ops ops;
        int ret;
 
-       /* Do not allow reads past end of device */
-       if (!len)
-               return 0;
-
        /* Wait for the device to get ready */
        panic_nand_wait(mtd, chip, 400);
 
@@ -2351,9 +2344,6 @@ static int nand_write(struct mtd_info *mtd, loff_t to, size_t len,
        struct mtd_oob_ops ops;
        int ret;
 
-       if (!len)
-               return 0;
-
        nand_get_device(chip, mtd, FL_WRITING);
        ops.len = len;
        ops.datbuf = (uint8_t *)buf;