TESTS: Keep the LogicalBlockProvisioning VPD around after we read it during
test startup.
This commit is contained in:
@@ -25,7 +25,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
int full_size;
|
int full_size;
|
||||||
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
struct scsi_inquiry_logical_block_provisioning *lbp;
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
|
|
||||||
printf("0180_writesame10_unmap:\n");
|
printf("0180_writesame10_unmap:\n");
|
||||||
@@ -77,21 +77,16 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inq_lbp = scsi_datain_unmarshall(task);
|
lbp = scsi_datain_unmarshall(task);
|
||||||
if (inq_lbp == NULL) {
|
if (lbp == NULL) {
|
||||||
printf("failed to unmarshall inquiry datain blob\n");
|
printf("failed to unmarshall inquiry datain blob\n");
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
lbpws10 = inq_lbp->lbpws10;
|
|
||||||
anc_sup = inq_lbp->anc_sup;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
printf("[OK]\n");
|
printf("[OK]\n");
|
||||||
|
|
||||||
if (lbpws10 == 0) {
|
if (lbp->lbpws10 == 0) {
|
||||||
printf("Device does not support WRITE_SAME10 for UNMAP. All WRITE_SAME10 commands to unmap should fail.\n");
|
printf("Device does not support WRITE_SAME10 for UNMAP. All WRITE_SAME10 commands to unmap should fail.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,13 +100,13 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
/* unmap the first 1 - 256 blocks at the start of the LUN */
|
/* unmap the first 1 - 256 blocks at the start of the LUN */
|
||||||
printf("Unmapping first 1-256 blocks ... ");
|
printf("Unmapping first 1-256 blocks ... ");
|
||||||
if (lbpws10 == 0) {
|
if (lbp->lbpws10 == 0) {
|
||||||
printf("(Should all fail since LBPWS10 is 0) ");
|
printf("(Should all fail since LBPWS10 is 0) ");
|
||||||
}
|
}
|
||||||
for (i=1; i<=256; i++) {
|
for (i=1; i<=256; i++) {
|
||||||
/* only try unmapping whole physical blocks, of if unmap using ws10 is not supported
|
/* only try unmapping whole physical blocks, of if unmap using ws10 is not supported
|
||||||
we test for all and they should all fail */
|
we test for all and they should all fail */
|
||||||
if (lbpws10 == 1 && i % lbppb) {
|
if (lbp->lbpws10 == 1 && i % lbppb) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
task = iscsi_writesame10_sync(iscsi, lun, 0,
|
task = iscsi_writesame10_sync(iscsi, lun, 0,
|
||||||
@@ -133,7 +128,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
ret = -2;
|
ret = -2;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
if (lbpws10) {
|
if (lbp->lbpws10) {
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
if (task->status != SCSI_STATUS_GOOD) {
|
||||||
printf("[FAILED]\n");
|
printf("[FAILED]\n");
|
||||||
printf("WRITESAME10 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
printf("WRITESAME10 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
||||||
@@ -160,13 +155,13 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
/* unmap the last 1 - 256 blocks at the end of the LUN */
|
/* unmap the last 1 - 256 blocks at the end of the LUN */
|
||||||
printf("Unmapping last 1-256 blocks ... ");
|
printf("Unmapping last 1-256 blocks ... ");
|
||||||
if (lbpws10 == 0) {
|
if (lbp->lbpws10 == 0) {
|
||||||
printf("(Should all fail since LBPWS10 is 0) ");
|
printf("(Should all fail since LBPWS10 is 0) ");
|
||||||
}
|
}
|
||||||
for (i=1; i<=256; i++) {
|
for (i=1; i<=256; i++) {
|
||||||
/* only try unmapping whole physical blocks, of if unmap using ws10 is not supported
|
/* only try unmapping whole physical blocks, of if unmap using ws10 is not supported
|
||||||
we test for all and they should all fail */
|
we test for all and they should all fail */
|
||||||
if (lbpws10 == 1 && i % lbppb) {
|
if (lbp->lbpws10 == 1 && i % lbppb) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,7 +175,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
if (lbpws10) {
|
if (lbp->lbpws10) {
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
if (task->status != SCSI_STATUS_GOOD) {
|
||||||
printf("[FAILED]\n");
|
printf("[FAILED]\n");
|
||||||
printf("WRITESAME10 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
printf("WRITESAME10 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
||||||
@@ -234,7 +229,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
/* Test UNMAP=1 and ANCHOR==1 */
|
/* Test UNMAP=1 and ANCHOR==1 */
|
||||||
printf("Try UNMAP==1 and ANCHOR==1 ... ");
|
printf("Try UNMAP==1 and ANCHOR==1 ... ");
|
||||||
if (anc_sup == 0) {
|
if (lbp->anc_sup == 0) {
|
||||||
printf("(ANC_SUP==0 so check condition expected) ");
|
printf("(ANC_SUP==0 so check condition expected) ");
|
||||||
}
|
}
|
||||||
task = iscsi_writesame10_sync(iscsi, lun, 0,
|
task = iscsi_writesame10_sync(iscsi, lun, 0,
|
||||||
@@ -247,7 +242,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
if (anc_sup == 0) {
|
if (lbp->anc_sup == 0) {
|
||||||
if (task->status != SCSI_STATUS_CHECK_CONDITION
|
if (task->status != SCSI_STATUS_CHECK_CONDITION
|
||||||
|| task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST
|
|| task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST
|
||||||
|| task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) {
|
|| task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
int full_size;
|
int full_size;
|
||||||
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
struct scsi_inquiry_logical_block_provisioning *lbp;
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
|
|
||||||
printf("0190_writesame16_unmap:\n");
|
printf("0190_writesame16_unmap:\n");
|
||||||
@@ -78,21 +78,16 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inq_lbp = scsi_datain_unmarshall(task);
|
lbp = scsi_datain_unmarshall(task);
|
||||||
if (inq_lbp == NULL) {
|
if (lbp == NULL) {
|
||||||
printf("failed to unmarshall inquiry datain blob\n");
|
printf("failed to unmarshall inquiry datain blob\n");
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
lbpws = inq_lbp->lbpws;
|
|
||||||
anc_sup = inq_lbp->anc_sup;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
printf("[OK]\n");
|
printf("[OK]\n");
|
||||||
|
|
||||||
if (lbpws == 0) {
|
if (lbp->lbpws == 0) {
|
||||||
printf("Device does not support WRITE_SAME16 for UNMAP. All WRITE_SAME16 commands to unmap should fail.\n");
|
printf("Device does not support WRITE_SAME16 for UNMAP. All WRITE_SAME16 commands to unmap should fail.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,13 +102,13 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
/* unmap the first 1 - 256 blocks at the start of the LUN */
|
/* unmap the first 1 - 256 blocks at the start of the LUN */
|
||||||
printf("Unmapping first 1-256 blocks ... ");
|
printf("Unmapping first 1-256 blocks ... ");
|
||||||
if (lbpws == 0) {
|
if (lbp->lbpws == 0) {
|
||||||
printf("(Should all fail since LBPWS is 0) ");
|
printf("(Should all fail since LBPWS is 0) ");
|
||||||
}
|
}
|
||||||
for (i=1; i<=256; i++) {
|
for (i=1; i<=256; i++) {
|
||||||
/* only try unmapping whole physical blocks, of if unmap using ws16 is not supported
|
/* only try unmapping whole physical blocks, of if unmap using ws16 is not supported
|
||||||
we test for all and they should all fail */
|
we test for all and they should all fail */
|
||||||
if (lbpws == 1 && i % lbppb) {
|
if (lbp->lbpws == 1 && i % lbppb) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
task = iscsi_writesame16_sync(iscsi, lun, 0,
|
task = iscsi_writesame16_sync(iscsi, lun, 0,
|
||||||
@@ -135,7 +130,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
ret = -2;
|
ret = -2;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
if (lbpws) {
|
if (lbp->lbpws) {
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
if (task->status != SCSI_STATUS_GOOD) {
|
||||||
printf("[FAILED]\n");
|
printf("[FAILED]\n");
|
||||||
printf("WRITESAME16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
printf("WRITESAME16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
||||||
@@ -162,13 +157,13 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
/* unmap the last 1 - 256 blocks at the end of the LUN */
|
/* unmap the last 1 - 256 blocks at the end of the LUN */
|
||||||
printf("Unmapping last 1-256 blocks ... ");
|
printf("Unmapping last 1-256 blocks ... ");
|
||||||
if (lbpws == 0) {
|
if (lbp->lbpws == 0) {
|
||||||
printf("(Should all fail since LBPWS is 0) ");
|
printf("(Should all fail since LBPWS is 0) ");
|
||||||
}
|
}
|
||||||
for (i=1; i<=256; i++) {
|
for (i=1; i<=256; i++) {
|
||||||
/* only try unmapping whole physical blocks, of if unmap using ws16 is not supported
|
/* only try unmapping whole physical blocks, of if unmap using ws16 is not supported
|
||||||
we test for all and they should all fail */
|
we test for all and they should all fail */
|
||||||
if (lbpws == 1 && i % lbppb) {
|
if (lbp->lbpws == 1 && i % lbppb) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,7 +177,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
if (lbpws) {
|
if (lbp->lbpws) {
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
if (task->status != SCSI_STATUS_GOOD) {
|
||||||
printf("[FAILED]\n");
|
printf("[FAILED]\n");
|
||||||
printf("WRITESAME16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
printf("WRITESAME16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
||||||
@@ -233,7 +228,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
/* Test UNMAP=1 and ANCHOR==1 */
|
/* Test UNMAP=1 and ANCHOR==1 */
|
||||||
printf("Try UNMAP==1 and ANCHOR==1 ... ");
|
printf("Try UNMAP==1 and ANCHOR==1 ... ");
|
||||||
if (anc_sup == 0) {
|
if (lbp->anc_sup == 0) {
|
||||||
printf("(ANC_SUP==0 so check condition expected) ");
|
printf("(ANC_SUP==0 so check condition expected) ");
|
||||||
}
|
}
|
||||||
task = iscsi_writesame16_sync(iscsi, lun, 0,
|
task = iscsi_writesame16_sync(iscsi, lun, 0,
|
||||||
@@ -246,7 +241,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
if (anc_sup == 0) {
|
if (lbp->anc_sup == 0) {
|
||||||
if (task->status != SCSI_STATUS_CHECK_CONDITION
|
if (task->status != SCSI_STATUS_CHECK_CONDITION
|
||||||
|| task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST
|
|| task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST
|
||||||
|| task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) {
|
|| task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) {
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ const char *initiatorname2 =
|
|||||||
const char *tgt_url;
|
const char *tgt_url;
|
||||||
|
|
||||||
struct scsi_inquiry_standard *inq;
|
struct scsi_inquiry_standard *inq;
|
||||||
|
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
||||||
struct scsi_readcapacity16 *rc16;
|
struct scsi_readcapacity16 *rc16;
|
||||||
|
|
||||||
size_t block_size;
|
size_t block_size;
|
||||||
@@ -54,9 +55,6 @@ uint64_t num_blocks;
|
|||||||
int lbppb;
|
int lbppb;
|
||||||
enum scsi_inquiry_peripheral_device_type device_type;
|
enum scsi_inquiry_peripheral_device_type device_type;
|
||||||
int data_loss;
|
int data_loss;
|
||||||
int anc_sup;
|
|
||||||
int lbpws10;
|
|
||||||
int lbpws;
|
|
||||||
int readonly;
|
int readonly;
|
||||||
int sbc3_support;
|
int sbc3_support;
|
||||||
int maximum_transfer_length;
|
int maximum_transfer_length;
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ do { \
|
|||||||
|
|
||||||
#define CHECK_FOR_LBPWS10 \
|
#define CHECK_FOR_LBPWS10 \
|
||||||
do { \
|
do { \
|
||||||
if (lbpws10 == 0) { \
|
if (inq_lbp->lbpws10 == 0) { \
|
||||||
logging(LOG_VERBOSE, "[SKIPPED] Logical unit does not" \
|
logging(LOG_VERBOSE, "[SKIPPED] Logical unit does not" \
|
||||||
" have LBPWS10. Skipping test"); \
|
" have LBPWS10. Skipping test"); \
|
||||||
CU_PASS("[SKIPPED] Logical unit does not have LBPWS10." \
|
CU_PASS("[SKIPPED] Logical unit does not have LBPWS10." \
|
||||||
@@ -99,7 +99,7 @@ do { \
|
|||||||
|
|
||||||
#define CHECK_FOR_LBPWS \
|
#define CHECK_FOR_LBPWS \
|
||||||
do { \
|
do { \
|
||||||
if (lbpws == 0) { \
|
if (inq_lbp->lbpws == 0) { \
|
||||||
logging(LOG_VERBOSE, "[SKIPPED] Logical unit does not" \
|
logging(LOG_VERBOSE, "[SKIPPED] Logical unit does not" \
|
||||||
" have LBPWS. Skipping test"); \
|
" have LBPWS. Skipping test"); \
|
||||||
CU_PASS("[SKIPPED] Logical unit does not have LBPWS." \
|
CU_PASS("[SKIPPED] Logical unit does not have LBPWS." \
|
||||||
@@ -129,15 +129,13 @@ do { \
|
|||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
extern struct scsi_inquiry_standard *inq;
|
extern struct scsi_inquiry_standard *inq;
|
||||||
|
extern struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
||||||
extern struct scsi_readcapacity16 *rc16;
|
extern struct scsi_readcapacity16 *rc16;
|
||||||
|
|
||||||
extern size_t block_size;
|
extern size_t block_size;
|
||||||
extern uint64_t num_blocks;
|
extern uint64_t num_blocks;
|
||||||
extern int lbppb;
|
extern int lbppb;
|
||||||
extern int data_loss;
|
extern int data_loss;
|
||||||
extern int anc_sup;
|
|
||||||
extern int lbpws10;
|
|
||||||
extern int lbpws;
|
|
||||||
extern int readonly;
|
extern int readonly;
|
||||||
extern int sbc3_support;
|
extern int sbc3_support;
|
||||||
extern int maximum_transfer_length;
|
extern int maximum_transfer_length;
|
||||||
|
|||||||
@@ -861,6 +861,7 @@ main(int argc, char *argv[])
|
|||||||
int res;
|
int res;
|
||||||
struct scsi_readcapacity10 *rc10;
|
struct scsi_readcapacity10 *rc10;
|
||||||
struct scsi_task *inq_task;
|
struct scsi_task *inq_task;
|
||||||
|
struct scsi_task *inq_lbp_task = NULL;
|
||||||
struct scsi_task *rc16_task;
|
struct scsi_task *rc16_task;
|
||||||
int full_size;
|
int full_size;
|
||||||
int is_usb;
|
int is_usb;
|
||||||
@@ -1049,37 +1050,27 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
/* if thin provisioned we also need to read the VPD page for it */
|
/* if thin provisioned we also need to read the VPD page for it */
|
||||||
if (rc16 && rc16->lbpme != 0){
|
if (rc16 && rc16->lbpme != 0){
|
||||||
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
inq_lbp_task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, 64);
|
||||||
|
if (inq_lbp_task == NULL || inq_lbp_task->status != SCSI_STATUS_GOOD) {
|
||||||
task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, 64);
|
|
||||||
if (task == NULL || task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Inquiry command failed : %s\n", iscsi_get_error(iscsic));
|
printf("Inquiry command failed : %s\n", iscsi_get_error(iscsic));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
full_size = scsi_datain_getfullsize(task);
|
full_size = scsi_datain_getfullsize(inq_lbp_task);
|
||||||
if (full_size > task->datain.size) {
|
if (full_size > inq_lbp_task->datain.size) {
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(inq_lbp_task);
|
||||||
|
|
||||||
/* we need more data for the full list */
|
/* we need more data for the full list */
|
||||||
if ((task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, full_size)) == NULL) {
|
if ((inq_lbp_task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, full_size)) == NULL) {
|
||||||
printf("Inquiry command failed : %s\n", iscsi_get_error(iscsic));
|
printf("Inquiry command failed : %s\n", iscsi_get_error(iscsic));
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inq_lbp = scsi_datain_unmarshall(task);
|
inq_lbp = scsi_datain_unmarshall(inq_lbp_task);
|
||||||
if (inq_lbp == NULL) {
|
if (inq_lbp == NULL) {
|
||||||
printf("failed to unmarshall inquiry datain blob\n");
|
printf("failed to unmarshall inquiry datain blob\n");
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
lbpws10 = inq_lbp->lbpws10;
|
|
||||||
lbpws = inq_lbp->lbpws;
|
|
||||||
anc_sup = inq_lbp->anc_sup;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1145,6 +1136,7 @@ main(int argc, char *argv[])
|
|||||||
free(discard_const(tgt_url));
|
free(discard_const(tgt_url));
|
||||||
|
|
||||||
scsi_free_scsi_task(inq_task);
|
scsi_free_scsi_task(inq_task);
|
||||||
|
scsi_free_scsi_task(inq_lbp_task);
|
||||||
scsi_free_scsi_task(rc16_task);
|
scsi_free_scsi_task(rc16_task);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ test_inquiry_block_limits(void)
|
|||||||
int ret, expected_pl;
|
int ret, expected_pl;
|
||||||
struct scsi_inquiry_block_limits *inq_bl;
|
struct scsi_inquiry_block_limits *inq_bl;
|
||||||
struct scsi_task *bl_task = NULL;
|
struct scsi_task *bl_task = NULL;
|
||||||
struct scsi_inquiry_logical_block_provisioning *inq_lbp = NULL;
|
struct scsi_inquiry_logical_block_provisioning *lbp = NULL;
|
||||||
struct scsi_task *lbp_task = NULL;
|
struct scsi_task *lbp_task = NULL;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -97,14 +97,14 @@ test_inquiry_block_limits(void)
|
|||||||
1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING,
|
1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING,
|
||||||
64, &lbp_task);
|
64, &lbp_task);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
inq_lbp = scsi_datain_unmarshall(lbp_task);
|
lbp = scsi_datain_unmarshall(lbp_task);
|
||||||
if (inq_lbp == NULL) {
|
if (lbp == NULL) {
|
||||||
logging(LOG_NORMAL, "[FAILURE] failed to unmarshall "
|
logging(LOG_NORMAL, "[FAILURE] failed to unmarshall "
|
||||||
"inquiry datain blob.");
|
"inquiry datain blob.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inq_lbp && inq_lbp->lbpu) {
|
if (lbp && lbp->lbpu) {
|
||||||
/* We support UNMAP so MAXIMUM UNMAP LBA COUNT and
|
/* We support UNMAP so MAXIMUM UNMAP LBA COUNT and
|
||||||
* MAXIMUM UNMAP BLOCK DESCRIPTOR COUNT.
|
* MAXIMUM UNMAP BLOCK DESCRIPTOR COUNT.
|
||||||
* They must be > 0.
|
* They must be > 0.
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ test_writesame10_unmap(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (anc_sup) {
|
if (inq_lbp->anc_sup) {
|
||||||
logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0");
|
logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0");
|
||||||
ret = writesame10(iscsic, tgt_lun, 0,
|
ret = writesame10(iscsic, tgt_lun, 0,
|
||||||
block_size, 1,
|
block_size, 1,
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ test_writesame16_unmap(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (anc_sup) {
|
if (inq_lbp->anc_sup) {
|
||||||
logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0");
|
logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0");
|
||||||
ret = writesame16(iscsic, tgt_lun, 0,
|
ret = writesame16(iscsic, tgt_lun, 0,
|
||||||
block_size, 1,
|
block_size, 1,
|
||||||
|
|||||||
Reference in New Issue
Block a user