Re: [PATCH v2] ata: libata-scsi: Fix get identity data failed

From: yangxingui
Date: Sun May 07 2023 - 21:11:46 EST




On 2023/5/7 22:51, Damien Le Moal wrote:
On 2023/05/05 18:06, yangxingui wrote:


On 2023/5/5 16:17, Damien Le Moal wrote:
On 2023/05/05 11:57, Xingui Yang wrote:
The function ata_get_identity() uses the helper ata_scsi_find_dev() to get
the ata_device structure of a scsi device. However, when the ata device is
managed by libsas, ata_scsi_find_dev() returns NULL, turning
ata_get_identity() into a nop and always returns -ENOMSG.

What do you do to hit the issue ? A while back for me it was the queue depth
setting causing problems. As Garry mentioned, this led to patch 141f3d6256e5
("ata: libata-sata: Fix device queue depth control").
Attempt to return the correct value at ata_scsi_find_dev() instead of
NULL, when the ata device is managed by libsas?

That I understand. My question is *what* user operation/command triggers this ?
Because on my test setup, under normal use, I do not see this issue (beside what
was already corrected with the queue depth control). Is the issue showing up
when using passthrough commands only ?
Yeah, we found that command "hdparm -i /dev/sdc" always return faild for SATA HDD disk. as follows:
[root@localhost ~]# hdparm -i /dev/sdc

/dev/sdc:
HDIO_GET_IDENTITY failed: Invalid argument

trace log:
execve("/usr/sbin/hdparm", ["hdparm", "-i", "/dev/sdc"], 0xffffea26f620 /* 42 vars */) = 0
ioctl(3, HDIO_GET_IDENTITY, 0xffffeb435f28) = -1 ENOMSG (No message of desired type)

Thanks,
Xingui
.