Messages in this thread Patch in this message | | | Date | Fri, 12 Sep 2008 16:34:16 -0700 | From | Andrew Morton <> | Subject | Re: Partition check considered as error is breaking mounting in 2.6.27 |
| |
On Fri, 12 Sep 2008 13:56:49 -0300 Herton Ronaldo Krzesinski <herton@mandriva.com.br> 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@linux-foundation.org>
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@mandriva.com.br> Cc: Abdel Benamrouche <draconux@gmail.com> Cc: Jens Axboe <jens.axboe@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> ---
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) { _
| |