Blob Blame History Raw
diff --git a/c_binding/libsg.c b/c_binding/libsg.c
index 4689369..4adc3c9 100644
--- a/c_binding/libsg.c
+++ b/c_binding/libsg.c
@@ -502,6 +502,11 @@ int _sg_io_vpd(char *err_msg, int fd, uint8_t page_code, uint8_t *data)
     case _SG_T10_SBC_VPD_BLK_DEV_CHA:
         data_len = _T10_SBC_VPD_BLK_DEV_CHA_MAX_LEN;
         break;
+    case _SG_T10_SPC_VPD_SUP_VPD_PGS:
+    case _SG_T10_SPC_VPD_UNIT_SN:
+    case _SG_T10_SPC_VPD_DI:
+        data_len = _SG_T10_SPC_VPD_SMALL_MAX_LEN;
+        break;
     default:
         data_len = _SG_T10_SPC_VPD_MAX_LEN;
     }
diff --git a/c_binding/libsg.h b/c_binding/libsg.h
index 3fb6ab5..467d27d 100644
--- a/c_binding/libsg.h
+++ b/c_binding/libsg.h
@@ -63,7 +63,9 @@
 /* SPC-5 rev 7, Table 142 - INQUIRY command */
 #define _SG_T10_SPC_INQUIRY_MAX_LEN                 0xffff
 /* VPD is a INQUIRY */
-#define _SG_T10_SPC_VPD_MAX_LEN                     _SG_T10_SPC_INQUIRY_MAX_LEN
+#define _SG_T10_SPC_VPD_MAX_LEN _SG_T10_SPC_INQUIRY_MAX_LEN
+/* some controller/drives don't like a two-byte length for VPD pages 0, 0x80, 0x83 */
+#define _SG_T10_SPC_VPD_SMALL_MAX_LEN 0xfc
 
 /* SPC-5 Table 444 - PROTOCOL IDENTIFIER field values */
 #define _SG_T10_SPC_PROTOCOL_ID_OBSOLETE           1