[SCSI] scsi_dh_rdac : Detect the different RDAC operating modes
This patch detects different operating RDAC modes during the discovery. It also collects the information about the preferred path. Signed-off-by: Babu Moger <babu.moger@lsi.com> Reviewed-by: Yanling Qi <yanling.qi@lsi.com> Reviewed-by: Sudhir Dachepalli <Sudhir.Dachepalli@lis.com> Reviewed-by: Somasundaram Krishnasamy <Somasundaram.Krishnasamy@lsi.com> Reviewed-by: Bob Stankey <Robert.Stankey@lsi.com> Reviewed-by: Vijay Chauhan <Vijay.Chauhan@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
eebe9b96dd
commit
1c3afc4234
@ -194,7 +194,6 @@ struct rdac_dh_data {
|
|||||||
|
|
||||||
#define RDAC_LUN_UNOWNED 0
|
#define RDAC_LUN_UNOWNED 0
|
||||||
#define RDAC_LUN_OWNED 1
|
#define RDAC_LUN_OWNED 1
|
||||||
#define RDAC_LUN_AVT 2
|
|
||||||
char lun_state;
|
char lun_state;
|
||||||
|
|
||||||
#define RDAC_PREFERRED 0
|
#define RDAC_PREFERRED 0
|
||||||
@ -473,25 +472,33 @@ static int check_ownership(struct scsi_device *sdev, struct rdac_dh_data *h)
|
|||||||
int err;
|
int err;
|
||||||
struct c9_inquiry *inqp;
|
struct c9_inquiry *inqp;
|
||||||
|
|
||||||
h->lun_state = RDAC_LUN_UNOWNED;
|
|
||||||
h->state = RDAC_STATE_ACTIVE;
|
h->state = RDAC_STATE_ACTIVE;
|
||||||
err = submit_inquiry(sdev, 0xC9, sizeof(struct c9_inquiry), h);
|
err = submit_inquiry(sdev, 0xC9, sizeof(struct c9_inquiry), h);
|
||||||
if (err == SCSI_DH_OK) {
|
if (err == SCSI_DH_OK) {
|
||||||
inqp = &h->inq.c9;
|
inqp = &h->inq.c9;
|
||||||
if ((inqp->avte_cvp >> 7) == 0x1) {
|
/* detect the operating mode */
|
||||||
/* LUN in AVT mode */
|
if ((inqp->avte_cvp >> 5) & 0x1)
|
||||||
sdev_printk(KERN_NOTICE, sdev,
|
h->mode = RDAC_MODE_IOSHIP; /* LUN in IOSHIP mode */
|
||||||
"%s: AVT mode detected\n",
|
else if (inqp->avte_cvp >> 7)
|
||||||
RDAC_NAME);
|
h->mode = RDAC_MODE_AVT; /* LUN in AVT mode */
|
||||||
h->lun_state = RDAC_LUN_AVT;
|
else
|
||||||
} else if ((inqp->avte_cvp & 0x1) != 0) {
|
h->mode = RDAC_MODE; /* LUN in RDAC mode */
|
||||||
/* LUN was owned by the controller */
|
|
||||||
h->lun_state = RDAC_LUN_OWNED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h->lun_state == RDAC_LUN_UNOWNED)
|
/* Update ownership */
|
||||||
h->state = RDAC_STATE_PASSIVE;
|
if (inqp->avte_cvp & 0x1)
|
||||||
|
h->lun_state = RDAC_LUN_OWNED;
|
||||||
|
else {
|
||||||
|
h->lun_state = RDAC_LUN_UNOWNED;
|
||||||
|
if (h->mode == RDAC_MODE)
|
||||||
|
h->state = RDAC_STATE_PASSIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update path prio*/
|
||||||
|
if (inqp->path_prio & 0x1)
|
||||||
|
h->preferred = RDAC_PREFERRED;
|
||||||
|
else
|
||||||
|
h->preferred = RDAC_NON_PREFERRED;
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user