123456789101112131415161718192021222324252627 |
- Author: Phillip Susi <psusi@ubuntu.com>
- Subject: fix an incorrect IO error reading SMART status
- Description: The read SMART status command's return status
- was testing for a success/failure value that included 8
- bits that are "N/A" according to the standard, and required
- that they be zeros. At least some drives do not fill them
- with zeros, so correct this by masking off the undefined
- bits.
- Index: b/atasmart.c
- ===================================================================
- --- a/atasmart.c
- +++ b/atasmart.c
- @@ -925,10 +925,10 @@
- /* SAT/USB bridges truncate packets, so we only check for 4F,
- * not for 2C on those */
- if ((d->type == SK_DISK_TYPE_ATA_PASSTHROUGH_12 || cmd[3] == htons(0x00C2U)) &&
- - cmd[4] == htons(0x4F00U))
- + (cmd[4] & htons(0xFF00U)) == htons(0x4F00U))
- *good = TRUE;
- else if ((d->type == SK_DISK_TYPE_ATA_PASSTHROUGH_12 || cmd[3] == htons(0x002CU)) &&
- - cmd[4] == htons(0xF400U))
- + (cmd[4] & htons(0xFF00U)) == htons(0xF400U))
- *good = FALSE;
- else {
- errno = EIO;
|