Commit 920b721b authored by Mike Miller's avatar Mike Miller Committed by Linus Torvalds

[PATCH] cciss: cylinder calculation fix

This patch fixes our cylinder calculations.  Without his fix the number of
cylinders maxes out at 65535.
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent fc5ebd34
...@@ -1470,6 +1470,8 @@ static void cciss_geometry_inquiry(int ctlr, int logvol, ...@@ -1470,6 +1470,8 @@ static void cciss_geometry_inquiry(int ctlr, int logvol,
drv->sectors = 32; // Sectors per track drv->sectors = 32; // Sectors per track
drv->cylinders = total_size / 255 / 32; drv->cylinders = total_size / 255 / 32;
} else { } else {
unsigned int t;
drv->block_size = block_size; drv->block_size = block_size;
drv->nr_blocks = total_size; drv->nr_blocks = total_size;
drv->heads = inq_buff->data_byte[6]; drv->heads = inq_buff->data_byte[6];
...@@ -1477,6 +1479,10 @@ static void cciss_geometry_inquiry(int ctlr, int logvol, ...@@ -1477,6 +1479,10 @@ static void cciss_geometry_inquiry(int ctlr, int logvol,
drv->cylinders = (inq_buff->data_byte[4] & 0xff) << 8; drv->cylinders = (inq_buff->data_byte[4] & 0xff) << 8;
drv->cylinders += inq_buff->data_byte[5]; drv->cylinders += inq_buff->data_byte[5];
drv->raid_level = inq_buff->data_byte[8]; drv->raid_level = inq_buff->data_byte[8];
t = drv->heads * drv->sectors;
if (t > 1) {
drv->cylinders = total_size/t;
}
} }
} else { /* Get geometry failed */ } else { /* Get geometry failed */
printk(KERN_WARNING "cciss: reading geometry failed, " printk(KERN_WARNING "cciss: reading geometry failed, "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment