linux/drivers/mtd/ubi
Ezequiel Garcia 978d649675 UBI: block: Fix block device size setting
We are currently taking the block device size from the ubi_volume_info.size
field. However, this is not the amount of data in the volume, but the
number of reserved physical eraseblocks, and hence leads to an incorrect
representation of the volume.

In particular, this produces I/O errors on static volumes as the block
interface may attempt to read unmapped PEBs:

$ cat /dev/ubiblock0_0 > /dev/null
UBI error: ubiblock_read_to_buf: ubiblock0_0 ubi_read error -22
end_request: I/O error, dev ubiblock0_0, sector 9536
Buffer I/O error on device ubiblock0_0, logical block 2384
[snip]

Fix this by using the ubi_volume_info.used_bytes field which is set to the
actual number of data bytes for both static and dynamic volumes.

While here, improve the error message to be less stupid and more useful:
UBI error: ubiblock_read_to_buf: ubiblock0_1 ubi_read error -9 on LEB=0, off=15872, len=512

It's worth noticing that the 512-byte sector representation of the volume
is only correct if the volume size is multiple of 512-bytes. This is true for
virtually any NAND device, given eraseblocks and pages are 512-byte multiple
and hence so is the LEB size.

Artem: tweak the error message and make it look more like other UBI error
messages.

Fixes: 9d54c8a33e ("UBI: R/O block driver on top of UBI volumes")
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Cc: stable@vger.kernel.org # v3.15+
2014-09-16 19:02:04 +03:00
..
attach.c UBI: fix error return code 2014-01-02 17:16:01 +02:00
block.c UBI: block: Fix block device size setting 2014-09-16 19:02:04 +03:00
build.c UBI: R/O block driver on top of UBI volumes 2014-02-28 16:29:48 +02:00
cdev.c UBI: weaken the 'exclusive' constraint when opening volumes to rename 2014-05-13 13:45:16 +03:00
debug.c UBI: embed ubi_debug_info field in ubi_device struct 2012-12-10 13:38:59 +02:00
debug.h mtd: rename random32() to prandom_u32() 2013-02-04 09:26:28 +02:00
eba.c UBI: Wire-up ->fm_sem 2012-10-03 12:29:37 +03:00
fastmap.c UBI: add missing kmem_cache_free() in process_pool_aeb error path 2014-09-16 18:18:58 +03:00
gluebi.c UBI: gluebi: rename misleading variables 2012-11-30 13:54:41 +02:00
io.c UBI: avoid program operation on NOR flash after erasure interrupted 2014-01-09 18:25:38 +02:00
kapi.c UBI: modify ubi_wl_flush function to clear work queue for a lnum 2012-05-21 11:34:41 +03:00
Kconfig UBI: block: Add CONFIG_BLOCK dependency 2014-03-04 14:49:53 +02:00
Makefile UBI: R/O block driver on top of UBI volumes 2014-02-28 16:29:48 +02:00
misc.c UBI: comply with coding style 2012-09-04 09:39:01 +03:00
ubi-media.h UBI: Add fastmap on-flash data structures 2012-10-03 12:29:37 +03:00
ubi.h MTD updates for 3.15: 2014-04-07 10:17:30 -07:00
upd.c UBI: replace memcpy with struct assignment 2012-12-03 13:54:14 +02:00
vmt.c UBI: introduce helpers dbg_chk_{io, gen} 2012-12-10 13:38:59 +02:00
vtbl.c UBI: init_volumes: Ignore volumes with no LEBs 2014-07-19 09:53:52 +03:00
wl.c UBI: bugfix in ubi_wl_flush() 2014-07-28 19:07:33 +03:00