Message ID | 20100615123936.GA25281@lst.de |
---|---|
State | New |
Headers | show |
Am 15.06.2010 14:39, schrieb Christoph Hellwig: > Both SCSI and virtio expect the physical block size relative to the > logical block size. So get the factor first before calculating the > log2. > > Reported-by: Mike Cao <bcao@redhat.com> > Signed-off-by: Christoph Hellwig <hch@lst.de> > > Index: qemu/block_int.h > =================================================================== > --- qemu.orig/block_int.h 2010-06-15 14:29:42.593012221 +0200 > +++ qemu/block_int.h 2010-06-15 14:30:00.164034570 +0200 > @@ -223,7 +223,9 @@ static inline unsigned int get_physical_ > { > unsigned int exp = 0, size; > > - for (size = conf->physical_block_size; size > 512; size >>= 1) { > + for (size = conf->physical_block_size / conf->logical_block_size; > + size > 512; 512 looks wrong now that size is the number of logical blocks. Kevin > + size >>= 1) { > exp++; > } > >
> 512 looks wrong now that size is the number of logical blocks.
The patch is entirely wrong, and only happen to work for the case
I was testing by accident. I'll resend a fixed version after I
created a little userspace test harness for all useful values.
Index: qemu/block_int.h =================================================================== --- qemu.orig/block_int.h 2010-06-15 14:29:42.593012221 +0200 +++ qemu/block_int.h 2010-06-15 14:30:00.164034570 +0200 @@ -223,7 +223,9 @@ static inline unsigned int get_physical_ { unsigned int exp = 0, size; - for (size = conf->physical_block_size; size > 512; size >>= 1) { + for (size = conf->physical_block_size / conf->logical_block_size; + size > 512; + size >>= 1) { exp++; }
Both SCSI and virtio expect the physical block size relative to the logical block size. So get the factor first before calculating the log2. Reported-by: Mike Cao <bcao@redhat.com> Signed-off-by: Christoph Hellwig <hch@lst.de>