Re: [PATCH] scsi_debug: Fix endianess in partition table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13-02-12 04:03 AM, Martin Peschke wrote:
On Mon, 2013-02-11 at 18:34 +0100, Martin Peschke wrote:
Both start_sect and nr_sects in struct partition are __le32 and
require cpu_to_le32() on assignment.

Steffen Maier has pointed me at:

block/partitions/msdos.c:	return
(sector_t)get_unaligned_le32(&p->start_sect);

Unfortunately, both get_unaligned_le32() and le32_to_cpu() appear to be
in use for start_sect and nr_sects.

Any one who would argue for changing my patch from cpu_to_le32 to
put_unaligned_le32()?

No (because I don't know). However since SCSI is big
endian and you are introducing some "le" code then a line
or so of explanation (comments) in your revised patch might
be helpful.


BTW Finding a big endian architecture to test this patch on is
not easy. The openwrt in my router is big endian (MIPS) but
openwrt don't distribute the scsi_debug module :-(

Doug Gilbert

Without this fix tools like fdisk show an invalid partition table
for SCSI devices emulated by scsi_debug on big-endian architectures,
like s390x. Besides a kernel message like this was emitted:

sda: p1 start 536870912 is beyond EOD, enabling native capacity
sda: p1 start 536870912 is beyond EOD, truncated

For verification 'xxd -l 512 /dev/sda' has been used to make sure
that this fix makes scsi_debug generated partition tables on s390x
look like the ones generated on my laptop.

Signed-off-by: Martin Peschke <mpeschke@xxxxxxxxxxxxxxxxxx>
Reviewed-by: Steffen Maier <maier@xxxxxxxxxxxxxxxxxx>

---
  drivers/scsi/scsi_debug.c |    4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -2662,8 +2662,8 @@ static void __init sdebug_build_parts(un
  			       / sdebug_sectors_per;
  		pp->end_sector = (end_sec % sdebug_sectors_per) + 1;

-		pp->start_sect = start_sec;
-		pp->nr_sects = end_sec - start_sec + 1;
+		pp->start_sect = cpu_to_le32(start_sec);
+		pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
  		pp->sys_ind = 0x83;	/* plain Linux partition */
  	}
  }


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux