cciss: Dynamically allocate the drive_info_struct for each logical drive.

cciss: Dynamically allocate the drive_info_struct for each logical drive.
This reduces the size of the per-hba ctlr_info structure from 106936
bytes to 8132 bytes.  That's on 32-bit systems.  On 64-bit systems, the
improvement is even bigger.  Without this, the ctlr_info struct is so big
that the driver won't even load on a 64 bit system if CISS_MAX_LUN was
at it's current setting of 1024 logical drives.

Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
Stephen M. Cameron
2009-09-17 13:48:31 -05:00
committed by Jens Axboe
parent e272afecaf
commit 9cef0d2f4f
2 changed files with 167 additions and 129 deletions
+164 -127
View File
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -45,13 +45,14 @@ typedef struct _drive_info_struct
* to prevent it from being opened or it's
* queue from being started.
*/
struct device *dev;
struct device dev;
__u8 serial_no[16]; /* from inquiry page 0x83,
* not necc. null terminated.
*/
char vendor[VENDOR_LEN + 1]; /* SCSI vendor string */
char model[MODEL_LEN + 1]; /* SCSI model string */
char rev[REV_LEN + 1]; /* SCSI revision string */
char device_initialized; /* indicates whether dev is initialized */
} drive_info_struct;
struct ctlr_info
@@ -87,7 +88,7 @@ struct ctlr_info
BYTE cciss_read_capacity;
// information about each logical volume
drive_info_struct drv[CISS_MAX_LUN];
drive_info_struct *drv[CISS_MAX_LUN];
struct access_method access;