On Fri, 12 Sep 2008 13:56:49 -0300I really like the patch Herton posted, with the big comment on why you don't want continue, to avoid repeating this conversation in a few years.
Herton Ronaldo Krzesinski <herton@xxxxxxxxxxxxxxx> wrote:
Recently I found a problem with a buggy camera that doesn't mount anymore with 2.6.27 (its memory is available via usb-storage), since commit 04ebd4aee52b06a2c38127d9208546e5b96f3a19
The camera is an Olympus X-840. The original issue comes from the camera itself: its format program creates a partition with an off by one error, while the device reports that its memory has 42079 sectors, the partition table reports also that the only partition on the disk has the size of 42079, but it fails to account for the first sector in the memory that contains the partition table, so in the end the partition exceeds the limit of the device size (42080, first sector plus 42079 from the first partition).
In previous kernels (2.6.26 and before), I still could mount and access the device (/dev/sdb1), although with the following errors:
Yeah.
Can you test this please?
From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Herton Krzesinski reports that the error-checking changes in
04ebd4aee52b06a2c38127d9208546e5b96f3a19 ("block/ioctl.c and
fs/partition/check.c: check value returned by add_partition") cause his
buggy USB camera to no longer mount. "The camera is an Olympus X-840. The original issue comes from the camera itself: its format program
creates a partition with an off by one error".
Buggy devices happen. It is better for the kernel to warn and to proceed
with the mount.
Reported-by: Herton Ronaldo Krzesinski <herton@xxxxxxxxxxxxxxx>
Cc: Abdel Benamrouche <draconux@xxxxxxxxx>
Cc: Jens Axboe <jens.axboe@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---
fs/partitions/check.c | 1 -
1 file changed, 1 deletion(-)
diff -puN fs/partitions/check.c~rescan_partitions-make-device-capacity-errors-non-fatal fs/partitions/check.c
--- a/fs/partitions/check.c~rescan_partitions-make-device-capacity-errors-non-fatal
+++ a/fs/partitions/check.c
@@ -540,7 +540,6 @@ int rescan_partitions(struct gendisk *di
if (from + size > get_capacity(disk)) {
printk(KERN_ERR " %s: p%d exceeds device capacity\n",
disk->disk_name, p);
- continue;
}
res = add_partition(disk, p, from, size, state->parts[p].flags);
if (res) {
_