|
|
d1d1d9 |
Index: hdparm-9.43/sgio.c
|
|
|
d1d1d9 |
===================================================================
|
|
|
d1d1d9 |
--- hdparm-9.43.orig/sgio.c
|
|
|
d1d1d9 |
+++ hdparm-9.43/sgio.c
|
|
|
d1d1d9 |
@@ -17,6 +17,10 @@
|
|
|
d1d1d9 |
|
|
|
d1d1d9 |
#include <linux/hdreg.h>
|
|
|
d1d1d9 |
|
|
|
d1d1d9 |
+#ifndef DEMAND_SENSE_DATA
|
|
|
d1d1d9 |
+ #define DEMAND_SENSE_DATA 0
|
|
|
d1d1d9 |
+#endif
|
|
|
d1d1d9 |
+
|
|
|
d1d1d9 |
extern int verbose;
|
|
|
d1d1d9 |
extern int prefer_ata12;
|
|
|
d1d1d9 |
|
|
|
d1d1d9 |
@@ -193,7 +197,7 @@ int sg16 (int fd, int rw, int dma, struc
|
|
|
d1d1d9 |
unsigned char cdb[SG_ATA_16_LEN];
|
|
|
d1d1d9 |
unsigned char sb[32], *desc;
|
|
|
d1d1d9 |
struct scsi_sg_io_hdr io_hdr;
|
|
|
d1d1d9 |
- int prefer12 = prefer_ata12, demanded_sense = 0;
|
|
|
d1d1d9 |
+ int prefer12 = prefer_ata12;
|
|
|
d1d1d9 |
|
|
|
d1d1d9 |
if (tf->command == ATA_OP_PIDENTIFY)
|
|
|
d1d1d9 |
prefer12 = 0;
|
|
|
d1d1d9 |
@@ -302,14 +306,16 @@ int sg16 (int fd, int rw, int dma, struc
|
|
|
d1d1d9 |
|
|
|
d1d1d9 |
desc = sb + 8;
|
|
|
d1d1d9 |
if (io_hdr.driver_status != SG_DRIVER_SENSE) {
|
|
|
d1d1d9 |
- if (sb[0] | sb[1] | sb[2] | sb[3] | sb[4] | sb[5] | sb[6] | sb[7] | sb[8] | sb[9]) {
|
|
|
d1d1d9 |
- static int second_try = 0;
|
|
|
d1d1d9 |
- if (!second_try++)
|
|
|
d1d1d9 |
+ static int second_try = 0;
|
|
|
d1d1d9 |
+ if (!second_try++) {
|
|
|
d1d1d9 |
+ if (sb[0] | sb[1] | sb[2] | sb[3] | sb[4] | sb[5] | sb[6] | sb[7] | sb[8] | sb[9]) {
|
|
|
d1d1d9 |
fprintf(stderr, "SG_IO: questionable sense data, results may be incorrect\n");
|
|
|
d1d1d9 |
- } else if (demanded_sense) {
|
|
|
d1d1d9 |
- static int second_try = 0;
|
|
|
d1d1d9 |
- if (!second_try++)
|
|
|
d1d1d9 |
+ }
|
|
|
d1d1d9 |
+#if DEMAND_SENSE_DATA
|
|
|
d1d1d9 |
+ else {
|
|
|
d1d1d9 |
fprintf(stderr, "SG_IO: missing sense data, results may be incorrect\n");
|
|
|
d1d1d9 |
+ }
|
|
|
d1d1d9 |
+#endif
|
|
|
d1d1d9 |
}
|
|
|
d1d1d9 |
} else if (sb[0] != 0x72 || sb[7] < 14 || desc[0] != 0x09 || desc[1] < 0x0c) {
|
|
|
d1d1d9 |
dump_bytes("SG_IO: bad/missing sense data, sb[]", sb, sizeof(sb));
|