On 09/12/2018 10:29 AM, Jason Yan wrote: > When ata device IDENTIFY failed, the ata device status is > ATA_DEV_UNKNOWN. The libata reported like: > > [113518.620433] ata5.00: qc timeout (cmd 0xec) > [113518.653646] ata5.00: failed to IDENTIFY (I/O error, err_mask=0x4) > > But libsas verifies the device status by ata_dev_disabled(), which > skiped ATA_DEV_UNKNOWN. This will make libsas think the ata device > probing succeed the device cannot be actually brought up. And even the > new bcast of this device will be considered as flutter and will not > probe this device again. > > Change ata_dev_disabled() to !ata_dev_enabled() so that libsas can > deal with this if the ata device probe failed. New bcasts can let us > try to probe the device again and bring it up if it is fine to > IDENTIFY. > > Tested-by: Zhou Yupeng <zhouyupeng1@xxxxxxxxxx> > Signed-off-by: Jason Yan <yanaijie@xxxxxxxxxx> > CC: John Garry <john.garry@xxxxxxxxxx> > CC: Johannes Thumshirn <jthumshirn@xxxxxxx> > CC: Ewan Milne <emilne@xxxxxxxxxx> > CC: Christoph Hellwig <hch@xxxxxx> > CC: Tomas Henzl <thenzl@xxxxxxxxxx> > CC: Dan Williams <dan.j.williams@xxxxxxxxx> > CC: Hannes Reinecke <hare@xxxxxxxx> > --- > drivers/scsi/libsas/sas_ata.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c > index 64a958a99f6a..4f6cdf53e913 100644 > --- a/drivers/scsi/libsas/sas_ata.c > +++ b/drivers/scsi/libsas/sas_ata.c > @@ -654,7 +654,7 @@ void sas_probe_sata(struct asd_sas_port *port) > /* if libata could not bring the link up, don't surface > * the device > */ > - if (ata_dev_disabled(sas_to_ata_dev(dev))) > + if (!ata_dev_enabled(sas_to_ata_dev(dev))) > sas_fail_probe(dev, __func__, -ENODEV); > } > > Reviewed-by: Hannes Reinecke <hare@xxxxxxxx> Cheers, Hannes