| From stable-bounces@linux.kernel.org Tue Aug 5 17:05:16 2008 |
| From: Petr Tesarik <ptesarik@suse.cz> |
| Date: Wed, 6 Aug 2008 00:05:07 GMT |
| Subject: ide-cd: fix endianity for the error message in cdrom_read_capacity |
| To: jejb@kernel.org, stable@kernel.org |
| Message-ID: <200808060005.m7605752008124@hera.kernel.org> |
| |
| From: Petr Tesarik <ptesarik@suse.cz> |
| |
| commit 938bb03d188a1e688fb0bcae49788f540193e80a uptream |
| |
| Aesthetic regards aside, commit e8e7b9eb11c34ee18bde8b7011af41938d1ad667 |
| still leaves a bug in the error message, because it uses the unconverted |
| big-endian value for printk. |
| |
| Fix this by using a local variable in machine byte order. The result is |
| correct, more readable, and also produces slightly shorter code on i386. |
| |
| Signed-off-by: Petr Tesarik <ptesarik@suse.cz> |
| Cc: Jens Axboe <jens.axboe@oracle.com> |
| Cc: Jan Kara <jack@suse.cz> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Cc: <stable@kernel.org> |
| Acked-by: Borislav Petkov <petkovbb@gmail.com> |
| [bart: __u32 -> u32] |
| Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/ide/ide-cd.c | 18 ++++++++++-------- |
| 1 file changed, 10 insertions(+), 8 deletions(-) |
| |
| --- a/drivers/ide/ide-cd.c |
| +++ b/drivers/ide/ide-cd.c |
| @@ -1298,6 +1298,7 @@ static int cdrom_read_capacity(ide_drive |
| |
| int stat; |
| struct request req; |
| + u32 blocklen; |
| |
| ide_cd_init_rq(drive, &req); |
| |
| @@ -1314,23 +1315,24 @@ static int cdrom_read_capacity(ide_drive |
| /* |
| * Sanity check the given block size |
| */ |
| - switch (capbuf.blocklen) { |
| - case __constant_cpu_to_be32(512): |
| - case __constant_cpu_to_be32(1024): |
| - case __constant_cpu_to_be32(2048): |
| - case __constant_cpu_to_be32(4096): |
| + blocklen = be32_to_cpu(capbuf.blocklen); |
| + switch (blocklen) { |
| + case 512: |
| + case 1024: |
| + case 2048: |
| + case 4096: |
| break; |
| default: |
| printk(KERN_ERR "%s: weird block size %u\n", |
| - drive->name, capbuf.blocklen); |
| + drive->name, blocklen); |
| printk(KERN_ERR "%s: default to 2kb block size\n", |
| drive->name); |
| - capbuf.blocklen = __constant_cpu_to_be32(2048); |
| + blocklen = 2048; |
| break; |
| } |
| |
| *capacity = 1 + be32_to_cpu(capbuf.lba); |
| - *sectors_per_frame = be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS; |
| + *sectors_per_frame = blocklen >> SECTOR_BITS; |
| return 0; |
| } |
| |