scsi: fix the type for well known LUs
Some devices may respond with wrong type for well-known logical units. This patch forces well-known type for devices which doesn't report it correct. Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> Signed-off-by: Sujit Reddy Thumma <sthumma@codeaurora.org> Signed-off-by: Dolev Raviv <draviv@codeaurora.org> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Родитель
db525fce95
Коммит
45341ca3fc
|
@ -815,6 +815,19 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
|
|||
} else {
|
||||
sdev->type = (inq_result[0] & 0x1f);
|
||||
sdev->removable = (inq_result[1] & 0x80) >> 7;
|
||||
|
||||
/*
|
||||
* some devices may respond with wrong type for
|
||||
* well-known logical units. Force well-known type
|
||||
* to enumerate them correctly.
|
||||
*/
|
||||
if (scsi_is_wlun(sdev->lun) && sdev->type != TYPE_WLUN) {
|
||||
sdev_printk(KERN_WARNING, sdev,
|
||||
"%s: correcting incorrect peripheral device type 0x%x for W-LUN 0x%16xhN\n",
|
||||
__func__, sdev->type, (unsigned int)sdev->lun);
|
||||
sdev->type = TYPE_WLUN;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (sdev->type == TYPE_RBC || sdev->type == TYPE_ROM) {
|
||||
|
|
|
@ -333,6 +333,7 @@ static inline int scsi_status_is_good(int status)
|
|||
#define TYPE_RBC 0x0e
|
||||
#define TYPE_OSD 0x11
|
||||
#define TYPE_ZBC 0x14
|
||||
#define TYPE_WLUN 0x1e /* well-known logical unit */
|
||||
#define TYPE_NO_LUN 0x7f
|
||||
|
||||
/* SCSI protocols; these are taken from SPC-3 section 7.5 */
|
||||
|
|
Загрузка…
Ссылка в новой задаче