forked from Minki/linux
[SCSI] add SCSI_UNKNOWN and LUN transfer limit restrictions
Original From: Ingo Flaschberger <if@xip.at> To support the RA4100 array from Compaq. This patch now correctly handles SCSI_UNKNOWN types with regard to BLIST_REPORTLUNS2 (allow it) and cdb[1] LUN inclusion (don't). It also allows a BLIST_MAX_512 flag to restrict the maximum transfer length to 512 blocks (apparently this is an RA4100 problem). Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
d637c4543f
commit
4d7db04a7a
@ -565,7 +565,8 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
|
|||||||
/*
|
/*
|
||||||
* If SCSI-2 or lower, store the LUN value in cmnd.
|
* If SCSI-2 or lower, store the LUN value in cmnd.
|
||||||
*/
|
*/
|
||||||
if (cmd->device->scsi_level <= SCSI_2) {
|
if (cmd->device->scsi_level <= SCSI_2 &&
|
||||||
|
cmd->device->scsi_level != SCSI_UNKNOWN) {
|
||||||
cmd->cmnd[1] = (cmd->cmnd[1] & 0x1f) |
|
cmd->cmnd[1] = (cmd->cmnd[1] & 0x1f) |
|
||||||
(cmd->device->lun << 5 & 0xe0);
|
(cmd->device->lun << 5 & 0xe0);
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,9 @@ static struct {
|
|||||||
{"CMD", "CRA-7280", NULL, BLIST_SPARSELUN}, /* CMD RAID Controller */
|
{"CMD", "CRA-7280", NULL, BLIST_SPARSELUN}, /* CMD RAID Controller */
|
||||||
{"CNSI", "G7324", NULL, BLIST_SPARSELUN}, /* Chaparral G7324 RAID */
|
{"CNSI", "G7324", NULL, BLIST_SPARSELUN}, /* Chaparral G7324 RAID */
|
||||||
{"CNSi", "G8324", NULL, BLIST_SPARSELUN}, /* Chaparral G8324 RAID */
|
{"CNSi", "G8324", NULL, BLIST_SPARSELUN}, /* Chaparral G8324 RAID */
|
||||||
{"COMPAQ", "LOGICAL VOLUME", NULL, BLIST_FORCELUN},
|
{"COMPAQ", "ARRAY CONTROLLER", NULL, BLIST_SPARSELUN | BLIST_LARGELUN |
|
||||||
|
BLIST_MAX_512 | BLIST_REPORTLUN2}, /* Compaq RA4x00 */
|
||||||
|
{"COMPAQ", "LOGICAL VOLUME", NULL, BLIST_FORCELUN | BLIST_MAX_512}, /* Compaq RA4x00 */
|
||||||
{"COMPAQ", "CR3500", NULL, BLIST_FORCELUN},
|
{"COMPAQ", "CR3500", NULL, BLIST_FORCELUN},
|
||||||
{"COMPAQ", "MSA1000", NULL, BLIST_SPARSELUN | BLIST_NOSTARTONADD},
|
{"COMPAQ", "MSA1000", NULL, BLIST_SPARSELUN | BLIST_NOSTARTONADD},
|
||||||
{"COMPAQ", "MSA1000 VOLUME", NULL, BLIST_SPARSELUN | BLIST_NOSTARTONADD},
|
{"COMPAQ", "MSA1000 VOLUME", NULL, BLIST_SPARSELUN | BLIST_NOSTARTONADD},
|
||||||
|
@ -673,6 +673,7 @@ static int scsi_add_lun(struct scsi_device *sdev, char *inq_result, int *bflags)
|
|||||||
case TYPE_MEDIUM_CHANGER:
|
case TYPE_MEDIUM_CHANGER:
|
||||||
case TYPE_ENCLOSURE:
|
case TYPE_ENCLOSURE:
|
||||||
case TYPE_COMM:
|
case TYPE_COMM:
|
||||||
|
case TYPE_RAID:
|
||||||
case TYPE_RBC:
|
case TYPE_RBC:
|
||||||
sdev->writeable = 1;
|
sdev->writeable = 1;
|
||||||
break;
|
break;
|
||||||
@ -737,6 +738,13 @@ static int scsi_add_lun(struct scsi_device *sdev, char *inq_result, int *bflags)
|
|||||||
if (*bflags & BLIST_SELECT_NO_ATN)
|
if (*bflags & BLIST_SELECT_NO_ATN)
|
||||||
sdev->select_no_atn = 1;
|
sdev->select_no_atn = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Maximum 512 sector transfer length
|
||||||
|
* broken RA4x00 Compaq Disk Array
|
||||||
|
*/
|
||||||
|
if (*bflags & BLIST_MAX_512)
|
||||||
|
blk_queue_max_sectors(sdev->request_queue, 512);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some devices may not want to have a start command automatically
|
* Some devices may not want to have a start command automatically
|
||||||
* issued when a device is added.
|
* issued when a device is added.
|
||||||
@ -1123,10 +1131,13 @@ static int scsi_report_lun_scan(struct scsi_target *starget, int bflags,
|
|||||||
* Also allow SCSI-2 if BLIST_REPORTLUN2 is set and host adapter does
|
* Also allow SCSI-2 if BLIST_REPORTLUN2 is set and host adapter does
|
||||||
* support more than 8 LUNs.
|
* support more than 8 LUNs.
|
||||||
*/
|
*/
|
||||||
if ((bflags & BLIST_NOREPORTLUN) ||
|
if (bflags & BLIST_NOREPORTLUN)
|
||||||
starget->scsi_level < SCSI_2 ||
|
return 1;
|
||||||
(starget->scsi_level < SCSI_3 &&
|
if (starget->scsi_level < SCSI_2 &&
|
||||||
(!(bflags & BLIST_REPORTLUN2) || shost->max_lun <= 8)) )
|
starget->scsi_level != SCSI_UNKNOWN)
|
||||||
|
return 1;
|
||||||
|
if (starget->scsi_level < SCSI_3 &&
|
||||||
|
(!(bflags & BLIST_REPORTLUN2) || shost->max_lun <= 8))
|
||||||
return 1;
|
return 1;
|
||||||
if (bflags & BLIST_NOLUN)
|
if (bflags & BLIST_NOLUN)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -28,4 +28,5 @@
|
|||||||
#define BLIST_NO_ULD_ATTACH 0x100000 /* device is actually for RAID config */
|
#define BLIST_NO_ULD_ATTACH 0x100000 /* device is actually for RAID config */
|
||||||
#define BLIST_SELECT_NO_ATN 0x200000 /* select without ATN */
|
#define BLIST_SELECT_NO_ATN 0x200000 /* select without ATN */
|
||||||
#define BLIST_RETRY_HWERROR 0x400000 /* retry HARDWARE_ERROR */
|
#define BLIST_RETRY_HWERROR 0x400000 /* retry HARDWARE_ERROR */
|
||||||
|
#define BLIST_MAX_512 0x800000 /* maximum 512 sector cdb length */
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user