Babu, So, in effect, any SCSI devices with INQ C8 page with "edid" would be treated as a rdac device, right ? Is that enough to identify _any_ SCSI device as a rdac device (even in future) ? Also, instead of repeating the code, can you use submit_inquiry() ? Chandra On Tue, 2012-04-10 at 17:06 +0000, Moger, Babu wrote: > This patch adds the dynamic match functionality to scsi_dh_rdac driver. > New vendor and product strings are normally not there in the kernel. Whenever > the new product is tested with this driver we see failures during the disco- > very. Without the handler attached, the default scsi mid-level retries would > take effect for certain check-conditions. Default retries(5) are not enough in > some cases(especially with large configuration or huge lun cases). > > This patch will send an inquiry if the vendor/product strings are not in the > device list and match with vendor signature. > > Signed-off-by: Babu Moger <babu.moger@xxxxxxxxxx> > Reviewed-by: Somasundaram Krishnasamy <Somasundaram.Krishnasamy@xxxxxxxxxx> > --- > > --- linux-3.4-rc2/drivers/scsi/device_handler/scsi_dh_rdac.c.orig 2012-04-07 20:30:41.000000000 -0500 > +++ linux-3.4-rc2/drivers/scsi/device_handler/scsi_dh_rdac.c 2012-04-10 10:48:40.000000000 -0500 > @@ -818,7 +818,10 @@ static const struct scsi_dh_devlist rdac > > static bool rdac_match(struct scsi_device *sdev) > { > - int i; > + int i, err; > + struct c8_inquiry inqp; > + struct request *rq; > + struct request_queue *q = sdev->request_queue; > > if (scsi_device_tpgs(sdev)) > return false; > @@ -831,6 +834,27 @@ static bool rdac_match(struct scsi_devic > return true; > } > } > + > + /* Now lets try to match the signature on 0xC8 page */ > + memset(&inqp, 0, sizeof(struct c8_inquiry)); > + rq = get_rdac_req(sdev, &inqp, sizeof(struct c8_inquiry), READ); > + if (!rq) > + return false; > + > + rq->cmd[0] = INQUIRY; > + rq->cmd[1] = 1; > + rq->cmd[2] = 0xC8; > + rq->cmd[4] = sizeof(struct c8_inquiry); > + rq->cmd_len = COMMAND_SIZE(INQUIRY); > + > + err = blk_execute_rq(q, NULL, rq, 1); > + blk_put_request(rq); > + if (err != -EIO) { > + if (inqp.page_id[0] == 'e' && inqp.page_id[1] == 'd' && > + inqp.page_id[2] == 'i' && inqp.page_id[3] == 'd') > + return true; > + } > + > return false; > } > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel