android_kernel_motorola_sm6225/drivers/mtd/devices
Christian Riesch 9a78bc83b4 mtd: Fix the behavior of OTP write if there is not enough room for data
If a write to one time programmable memory (OTP) hits the end of this
memory area, no more data can be written. The count variable in
mtdchar_write() in drivers/mtd/mtdchar.c is not decreased anymore.
We are trapped in the loop forever, mtdchar_write() will never return
in this case.

The desired behavior of a write in such a case is described in [1]:
- Try to write as much data as possible, truncate the write to fit into
  the available memory and return the number of bytes that actually
  have been written.
- If no data could be written at all, return -ENOSPC.

This patch fixes the behavior of OTP write if there is not enough space
for all data:

1) mtd_write_user_prot_reg() in drivers/mtd/mtdcore.c is modified to
   return -ENOSPC if no data could be written at all.
2) mtdchar_write() is modified to handle -ENOSPC correctly. Exit if a
   write returned -ENOSPC and yield the correct return value, either
   then number of bytes that could be written, or -ENOSPC, if no data
   could be written at all.

Furthermore the patch harmonizes the behavior of the OTP memory write
in drivers/mtd/devices/mtd_dataflash.c with the other implementations
and the requirements from [1]. Instead of returning -EINVAL if the data
does not fit into the OTP memory, we try to write as much data as
possible/truncate the write.

[1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html

Signed-off-by: Christian Riesch <christian.riesch@omicron.at>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
2014-03-10 22:42:31 -07:00
..
bcm47xxsflash.c mtd: bcm47xxsflash: writing support 2013-08-30 21:52:20 +01:00
bcm47xxsflash.h mtd: bcm47xxsflash: implement ChipCommon R/W ops 2013-08-05 18:20:32 +01:00
block2mtd.c mtd: block2mtd: check device size 2014-03-10 22:42:31 -07:00
docg3.c mtd: docg3: Use devm_*() functions 2014-01-03 11:22:27 -08:00
docg3.h mtd: docg3 add protection against concurrency 2012-03-27 01:03:27 +01:00
elm.c mtd: devices: elm: Remove unnecessary OOM messages 2014-03-10 22:42:24 -07:00
Kconfig mtd: m25p80: remove M25PXX_USE_FAST_READ Kconfig 2013-11-06 23:33:06 -08:00
lart.c mtd: move zero length verification to MTD API functions 2012-03-27 00:32:19 +01:00
m25p80.c mtd: m25p80: add Macronix mx66l1g55g 1Gbit SPI flash 2014-03-10 22:42:29 -07:00
Makefile mtd: doc: remove support for DoC 2000/2001/2001+ 2013-04-05 12:04:31 +01:00
ms02-nv.c mtd: ms02-nv: remove superfluous name cast 2014-01-03 11:22:09 -08:00
ms02-nv.h MTD/JFFS2: remove CVS keywords 2008-06-04 17:50:17 +01:00
mtd_dataflash.c mtd: Fix the behavior of OTP write if there is not enough room for data 2014-03-10 22:42:31 -07:00
mtdram.c mtd: mtdram: add missing 'const' 2014-01-20 11:55:23 -08:00
phram.c mtd: phram: Repair multiple instances support 2014-03-10 22:42:21 -07:00
pmc551.c mtd: pmc551: Remove unnecessary OOM messages 2014-03-10 22:42:24 -07:00
slram.c mtd: slram: invalid checking of absolute end address 2012-11-09 17:02:50 +02:00
spear_smi.c mtd: spear_smi: Remove unnecessary OOM messages 2014-03-10 22:42:24 -07:00
sst25l.c mtd: delete non-required instances of include <linux/init.h> 2014-03-10 22:42:22 -07:00