mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
9a78bc83b4
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> |
||
---|---|---|
.. | ||
bcm47xxsflash.c | ||
bcm47xxsflash.h | ||
block2mtd.c | ||
docg3.c | ||
docg3.h | ||
elm.c | ||
Kconfig | ||
lart.c | ||
m25p80.c | ||
Makefile | ||
ms02-nv.c | ||
ms02-nv.h | ||
mtd_dataflash.c | ||
mtdram.c | ||
phram.c | ||
pmc551.c | ||
slram.c | ||
spear_smi.c | ||
sst25l.c |