scsi: megaraid_sas - added bios_param in scsi_host_template
Subsystems (2)
PATCH 2/5 scsi: megaraid_sas - added bios_param in scsi_host_template
Added bios_param in scsi_host_template to return disk geometry.
Signed-off-by Sumant Patro <[email protected]>
---
drivers/scsi/megaraid/megaraid_sas.c | 45 +++++++++++++++++++++++++ 1 files changed, 45 insertions(+)
drivers/scsi/megaraid/megaraid_sas.c +45 -0
@@ -35,6 +35,7 @@#include <asm/uaccess.h> #include <linux/fs.h> #include <linux/compat.h> +#include <linux/blkdev.h> #include <linux/mutex.h> #include <scsi/scsi.h>
@@ -1015,6 +1016,49 @@ static int megasas_reset_bus_host(struct }/** +* megasas_bios_param - Returns disk geometry for a disk +* @sdev: device handle +* @bdev: block device +* @capacity: drive capacity +* @geom: geometry parameters +*/ +static int +megasas_bios_param (struct scsi_device *sdev,struct block_device *bdev, +sector_t capacity,int geom[]) +{ +int heads; +int sectors; +sector_t cylinders; +ulong dummy; +/* Default heads (64) & sectors (32) */ + heads =64 ; + sectors =32 ; + + dummy = heads * sectors; + cylinders = capacity; + +sector_div (cylinders, dummy); + +/* +* Handle extended translation size for logical drives > 1Gb +*/ + +if ((ulong )capacity >=0x200000 ) { + heads =255 ; + sectors =63 ; + dummy = heads*sectors; + cylinders = capacity; +sector_div (cylinders, dummy); + } + + geom[0 ] = heads; + geom[1 ] = sectors; + geom[2 ] = cylinders; + +return 0 ; +} + +/** * megasas_service_aen - Processes an event notification * @instance: Adapter soft state * @cmd: AEN command completed by the ISR
@@ -1054,6 +1098,7 @@ static struct scsi_host_template megasas .eh_device_reset_handler = megasas_reset_device, .eh_bus_reset_handler = megasas_reset_bus_host, .eh_host_reset_handler = megasas_reset_bus_host, + .bios_param = megasas_bios_param, .use_clustering = ENABLE_CLUSTERING, };
drivers/scsi/megaraid/megaraid_sas.c +45 -0
63 lines not on this page · raw message
drivers/scsi/megaraid/megaraid_sas.c static int megasas_reset_bus_host(struct · line 1032
Quoted 8 lines · On Tue, 06 Feb 2007 13:57:23 -0800 Sumant Patro <[email protected]> wrote:
drivers/scsi/megaraid/megaraid_sas.c +8
-0+static int +megasas_bios_param (struct scsi_device *sdev,struct block_device *bdev, +sector_t capacity,int geom[]) +{ +int heads; +int sectors; +sector_t cylinders; +ulong dummy;
Plain old `unsigned long' is preferred.
Quoted 4 lines
drivers/scsi/megaraid/megaraid_sas.c +4
-0+/* Default heads (64) & sectors (32) */ + heads =64 ; + sectors =32 ; +
drivers/scsi/megaraid/megaraid_sas.c static int megasas_reset_bus_host(struct · line 1046
Quoted 10 lines
drivers/scsi/megaraid/megaraid_sas.c +10
-0+ dummy = heads * sectors; + cylinders = capacity; + +sector_div (cylinders, dummy); + +/* +* Handle extended translation size for logical drives > 1Gb +*/ + +if ((ulong )capacity >=0x200000 ) {
Here we're casting a sector_t down to a 32-bit number. Are you sure that `capacity' here can never exceed 0xffffffff?