On Fri, 2019-04-12 at 17:07 +0800, Li Zhong wrote: > commit 84961f28e9d1 ("[SCSI] Don't add scsi_device for devices that > return PQ=1, PDT=0x1f") returns SCSI_SCAN_TARGET_PRESENT if inquiry returns > PQ=1, and PDT = 0x1f. However, from the scsi spec, it seemed setting PQ=1, > and PDT to the type it is capable to support, can also mean the device > is not connected. E.g. we see an IBM/2145 returns PQ=1 and PDT=0 > for a non mapped lun (details attached at the end). > > This patch changes the check condition a bit, so the check don't require > PTD to be 0x1f when PQ=1. > > $ echo 0 0 1 > /sys/class/scsi_host/host1/scan > [ 2483.722186] scsi 1:0:0:1: scsi scan: INQUIRY pass 1 length 36 > [ 2483.725687] scsi 1:0:0:1: scsi scan: INQUIRY successful with code 0x0 > [ 2483.729171] scsi 1:0:0:1: scsi scan: INQUIRY pass 2 length 109 > [ 2483.732481] scsi 1:0:0:1: scsi scan: INQUIRY successful with code 0x0 > [ 2483.735911] scsi 1:0:0:1: Direct-Access IBM 2145 0000 > PQ: 1 ANSI: 6 > [ 2483.741282] scsi 1:0:0:1: Attached scsi generic sg2 type 0 > > $ tail /proc/scsi/scsi > Attached devices: > Host: scsi1 Channel: 00 Id: 00 Lun: 00 > Vendor: IBM Model: 2145 Rev: 0000 > Type: Direct-Access ANSI SCSI revision: 06 > Host: scsi0 Channel: 00 Id: 00 Lun: 00 > Vendor: IBM Model: 2145 Rev: 0000 > Type: Direct-Access ANSI SCSI revision: 06 > Host: scsi1 Channel: 00 Id: 00 Lun: 01 > Vendor: IBM Model: 2145 Rev: 0000 > Type: Direct-Access ANSI SCSI revision: 06 > > $ lsscsi > [0:0:0:0] disk IBM 2145 0000 /dev/sdb > [1:0:0:0] disk IBM 2145 0000 /dev/sda > [1:0:0:1] disk IBM 2145 0000 - > > Signed-off-by: Li Zhong <lizhon...@gmail.com> > --- > drivers/scsi/scsi_scan.c | 4 ﭗ橸ṷ梧뇪觬(), 2 deletions(-) > > diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c > index 53380e07b40e..eb72644e7915 100644 > --- a/drivers/scsi/scsi_scan.c > ﯦカ뢯窻㾱쬢ﻇⲊ윚鷍痣缾흞㟲쭚똧 int scsi_probe_and_add_lun(struct scsi_target *starget, > * PDT=00h Direct-access device (floppy) > * PDT=1Fh none (no FDD connected to the requested logical unit) > */ > - if (((result[0] >> 5) == 1 || starget->pdt_1f_for_no_lun) && > - (result[0] & 0x1f) == 0x1f && > if (((result[0] >> 5) == 1 || > (starget->pdt_1f_for_no_lun && (result[0] & 0x1f) == 0x1f)) && > !scsi_is_wlun(lun)) { > SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev, > "scsi scan: peripheral device type"
Should the comment above that if-statement be updated? Thanks, Bart.