Skip to content

Commit

Permalink
[SCSI] scsi_dh_rdac: changes to collect the rdac debug information du…
Browse files Browse the repository at this point in the history
…ring the initialization

Adding the code to read the debug information during initialization. This
patch collects the information about storage and controllers during
rdac_activate.

Signed-off-by: Babu Moger <babu.moger@lsi.com>
Reviewed-by: Vijay Chauhan <vijay.chauhan@lsi.com>
Reviewed-by: Bob Stankey <Robert.stankey@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
  • Loading branch information
Moger, Babu authored and James Bottomley committed Sep 12, 2009
1 parent 87b79a5 commit 1527666
Showing 1 changed file with 27 additions and 7 deletions.
34 changes: 27 additions & 7 deletions drivers/scsi/device_handler/scsi_dh_rdac.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ struct c9_inquiry {

#define SUBSYS_ID_LEN 16
#define SLOT_ID_LEN 2
#define ARRAY_LABEL_LEN 31

struct c4_inquiry {
u8 peripheral_info;
Expand All @@ -135,6 +136,8 @@ struct rdac_controller {
struct rdac_pg_legacy legacy;
struct rdac_pg_expanded expanded;
} mode_select;
u8 index;
u8 array_name[ARRAY_LABEL_LEN];
};
struct c8_inquiry {
u8 peripheral_info;
Expand Down Expand Up @@ -303,7 +306,8 @@ static void release_controller(struct kref *kref)
kfree(ctlr);
}

static struct rdac_controller *get_controller(u8 *subsys_id, u8 *slot_id)
static struct rdac_controller *get_controller(u8 *subsys_id, u8 *slot_id,
char *array_name)
{
struct rdac_controller *ctlr, *tmp;

Expand All @@ -324,6 +328,14 @@ static struct rdac_controller *get_controller(u8 *subsys_id, u8 *slot_id)
/* initialize fields of controller */
memcpy(ctlr->subsys_id, subsys_id, SUBSYS_ID_LEN);
memcpy(ctlr->slot_id, slot_id, SLOT_ID_LEN);
memcpy(ctlr->array_name, array_name, ARRAY_LABEL_LEN);

/* update the controller index */
if (slot_id[1] == 0x31)
ctlr->index = 0;
else
ctlr->index = 1;

kref_init(&ctlr->kref);
ctlr->use_ms10 = -1;
list_add(&ctlr->node, &ctlr_list);
Expand Down Expand Up @@ -363,9 +375,10 @@ static int submit_inquiry(struct scsi_device *sdev, int page_code,
return err;
}

static int get_lun(struct scsi_device *sdev, struct rdac_dh_data *h)
static int get_lun_info(struct scsi_device *sdev, struct rdac_dh_data *h,
char *array_name)
{
int err;
int err, i;
struct c8_inquiry *inqp;

err = submit_inquiry(sdev, 0xC8, sizeof(struct c8_inquiry), h);
Expand All @@ -377,6 +390,11 @@ static int get_lun(struct scsi_device *sdev, struct rdac_dh_data *h)
inqp->page_id[2] != 'i' || inqp->page_id[3] != 'd')
return SCSI_DH_NOSYS;
h->lun = inqp->lun[7]; /* Uses only the last byte */

for(i=0; i<ARRAY_LABEL_LEN-1; ++i)
*(array_name+i) = inqp->array_user_label[(2*i)+1];

*(array_name+ARRAY_LABEL_LEN-1) = '\0';
}
return err;
}
Expand Down Expand Up @@ -410,15 +428,16 @@ static int check_ownership(struct scsi_device *sdev, struct rdac_dh_data *h)
}

static int initialize_controller(struct scsi_device *sdev,
struct rdac_dh_data *h)
struct rdac_dh_data *h, char *array_name)
{
int err;
struct c4_inquiry *inqp;

err = submit_inquiry(sdev, 0xC4, sizeof(struct c4_inquiry), h);
if (err == SCSI_DH_OK) {
inqp = &h->inq.c4;
h->ctlr = get_controller(inqp->subsys_id, inqp->slot_id);
h->ctlr = get_controller(inqp->subsys_id, inqp->slot_id,
array_name);
if (!h->ctlr)
err = SCSI_DH_RES_TEMP_UNAVAIL;
}
Expand Down Expand Up @@ -652,6 +671,7 @@ static int rdac_bus_attach(struct scsi_device *sdev)
struct rdac_dh_data *h;
unsigned long flags;
int err;
char array_name[ARRAY_LABEL_LEN];

scsi_dh_data = kzalloc(sizeof(struct scsi_device_handler *)
+ sizeof(*h) , GFP_KERNEL);
Expand All @@ -666,11 +686,11 @@ static int rdac_bus_attach(struct scsi_device *sdev)
h->lun = UNINITIALIZED_LUN;
h->state = RDAC_STATE_ACTIVE;

err = get_lun(sdev, h);
err = get_lun_info(sdev, h, array_name);
if (err != SCSI_DH_OK)
goto failed;

err = initialize_controller(sdev, h);
err = initialize_controller(sdev, h, array_name);
if (err != SCSI_DH_OK)
goto failed;

Expand Down

0 comments on commit 1527666

Please sign in to comment.