TESTS more writesame1* test fixes

This commit is contained in:
Ronnie Sahlberg
2013-08-25 16:39:38 -07:00
parent ab600e39b0
commit daac72a8f9
11 changed files with 51 additions and 54 deletions

View File

@@ -1539,7 +1539,6 @@ iscsi_writesame10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
scsi_free_scsi_task(task); scsi_free_scsi_task(task);
return NULL; return NULL;
} }
return task; return task;
} }

View File

@@ -16,6 +16,7 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <alloca.h>
#include <CUnit/CUnit.h> #include <CUnit/CUnit.h>
@@ -28,6 +29,7 @@ void
test_writesame10_beyond_eol(void) test_writesame10_beyond_eol(void)
{ {
int i, ret; int i, ret;
unsigned char *buf = alloca(block_size);
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_SBC; CHECK_FOR_SBC;
@@ -39,13 +41,11 @@ test_writesame10_beyond_eol(void)
logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, LOG_BLANK_LINE);
logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks one block beyond the end"); logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks one block beyond the end");
memset(buf, 0, block_size);
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
unsigned char *buf = malloc(block_size);
ret = writesame10_lbaoutofrange(iscsic, tgt_lun, num_blocks - i + 1, ret = writesame10_lbaoutofrange(iscsic, tgt_lun, num_blocks - i + 1,
block_size, i, block_size, i,
0, 0, 0, 0, buf); 0, 0, 0, 0, buf);
free(buf);
if (ret == -2) { if (ret == -2) {
CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test"); CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test");
return; return;
@@ -56,36 +56,27 @@ test_writesame10_beyond_eol(void)
logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks at LBA==2^31"); logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks at LBA==2^31");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
unsigned char *buf = malloc(block_size);
ret = writesame10_lbaoutofrange(iscsic, tgt_lun, 0x80000000, ret = writesame10_lbaoutofrange(iscsic, tgt_lun, 0x80000000,
block_size, i, block_size, i,
0, 0, 0, 0, buf); 0, 0, 0, 0, buf);
free(buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }
logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks at LBA==-1"); logging(LOG_VERBOSE, "Test WRITESAME10 1-256 blocks at LBA==-1");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
unsigned char *buf = malloc(block_size);
ret = writesame10_lbaoutofrange(iscsic, tgt_lun, -1, ret = writesame10_lbaoutofrange(iscsic, tgt_lun, -1,
block_size, i, block_size, i,
0, 0, 0, 0, buf); 0, 0, 0, 0, buf);
free(buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }
logging(LOG_VERBOSE, "Test WRITESAME10 2-256 blocks all but one block beyond the end"); logging(LOG_VERBOSE, "Test WRITESAME10 2-256 blocks all but one block beyond the end");
for (i = 2; i <= 256; i++) { for (i = 2; i <= 256; i++) {
unsigned char *buf = malloc(block_size);
ret = writesame10_lbaoutofrange(iscsic, tgt_lun, num_blocks - 1, ret = writesame10_lbaoutofrange(iscsic, tgt_lun, num_blocks - 1,
block_size, i, block_size, i,
0, 0, 0, 0, buf); 0, 0, 0, 0, buf);
free(buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }
} }

View File

@@ -17,6 +17,7 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <alloca.h>
#include <CUnit/CUnit.h> #include <CUnit/CUnit.h>
@@ -30,6 +31,7 @@ void
test_writesame10_simple(void) test_writesame10_simple(void)
{ {
int i, ret; int i, ret;
unsigned char *buf = alloca(block_size);
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_SBC; CHECK_FOR_SBC;
@@ -37,13 +39,11 @@ test_writesame10_simple(void)
logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, LOG_BLANK_LINE);
logging(LOG_VERBOSE, "Test WRITESAME10 of 1-256 blocks at the start of the LUN"); logging(LOG_VERBOSE, "Test WRITESAME10 of 1-256 blocks at the start of the LUN");
memset(buf, 0, block_size);
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
unsigned char *buf = malloc(block_size);
ret = writesame10(iscsic, tgt_lun, 0, ret = writesame10(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 0, 0, 0, buf); 0, 0, 0, 0, buf);
free(buf);
if (ret == -2) { if (ret == -2) {
CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test"); CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test");
return; return;
@@ -53,12 +53,9 @@ test_writesame10_simple(void)
logging(LOG_VERBOSE, "Test WRITESAME10 of 1-256 blocks at the end of the LUN"); logging(LOG_VERBOSE, "Test WRITESAME10 of 1-256 blocks at the end of the LUN");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
unsigned char *buf = malloc(block_size );
ret = writesame10(iscsic, tgt_lun, num_blocks - i, ret = writesame10(iscsic, tgt_lun, num_blocks - i,
block_size, i, block_size, i,
0, 0, 0, 0, buf); 0, 0, 0, 0, buf);
free(buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }

View File

@@ -31,7 +31,7 @@ test_writesame10_unmap(void)
{ {
int i, ret; int i, ret;
unsigned int j; unsigned int j;
unsigned char *buf = malloc(block_size * 256); unsigned char *buf = alloca(256 * block_size);
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_THIN_PROVISIONING; CHECK_FOR_THIN_PROVISIONING;
@@ -43,16 +43,17 @@ test_writesame10_unmap(void)
"the LUN"); "the LUN");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write10(iscsic, tgt_lun, 0, ret = write10(iscsic, tgt_lun, 0,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
memset(buf, 0, block_size);
ret = writesame10(iscsic, tgt_lun, 0, ret = writesame10(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
if (rc16->lbprz) { if (rc16->lbprz) {
@@ -80,13 +81,14 @@ test_writesame10_unmap(void)
"the LUN"); "the LUN");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write10(iscsic, tgt_lun, num_blocks - i, ret = write10(iscsic, tgt_lun, num_blocks - i,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
memset(buf, 0, block_size);
ret = writesame10(iscsic, tgt_lun, num_blocks - i, ret = writesame10(iscsic, tgt_lun, num_blocks - i,
block_size, i, block_size, i,
0, 1, 0, 0, buf); 0, 1, 0, 0, buf);
@@ -116,22 +118,23 @@ test_writesame10_unmap(void)
"invalid"); "invalid");
ret = writesame10_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame10_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
1, 0, 0, 0, NULL); 1, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
if (inq_lbp->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");
memset(buf, 0, block_size);
ret = writesame10(iscsic, tgt_lun, 0, ret = writesame10(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
1, 1, 0, 0, NULL); 1, 1, 0, 0, buf);
} else { } else {
logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0 no " logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0 no "
"ANC_SUP so expecting to fail"); "ANC_SUP so expecting to fail");
ret = writesame10_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame10_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
1, 1, 0, 0, NULL); 1, 1, 0, 0, buf);
} }
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
@@ -141,7 +144,6 @@ test_writesame10_unmap(void)
"BlockLimits VPD is missing."); "BlockLimits VPD is missing.");
CU_FAIL("[FAILED] WRITESAME10 works but " CU_FAIL("[FAILED] WRITESAME10 works but "
"BlockLimits VPD is missing."); "BlockLimits VPD is missing.");
free(buf);
return; return;
} }
@@ -153,16 +155,17 @@ test_writesame10_unmap(void)
"lengths"); "lengths");
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write10(iscsic, tgt_lun, 0, ret = write10(iscsic, tgt_lun, 0,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
memset(buf, 0, block_size);
ret = writesame10(iscsic, tgt_lun, 0, ret = writesame10(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
if (rc16->lbprz) { if (rc16->lbprz) {
@@ -191,8 +194,7 @@ test_writesame10_unmap(void)
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME10", i);
ret = writesame10_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame10_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }
free(buf);
} }

View File

@@ -16,6 +16,7 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <alloca.h>
#include <CUnit/CUnit.h> #include <CUnit/CUnit.h>
@@ -29,6 +30,7 @@ void
test_writesame10_unmap_vpd(void) test_writesame10_unmap_vpd(void)
{ {
int ret; int ret;
unsigned char *buf = alloca(block_size);
logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, LOG_BLANK_LINE);
logging(LOG_VERBOSE, "Test WRITESAME10 UNMAP availability is " logging(LOG_VERBOSE, "Test WRITESAME10 UNMAP availability is "
@@ -39,9 +41,10 @@ test_writesame10_unmap_vpd(void)
logging(LOG_VERBOSE, "Check if WRITESAME10 can be used for UNMAP."); logging(LOG_VERBOSE, "Check if WRITESAME10 can be used for UNMAP.");
logging(LOG_VERBOSE, "Unmap 1 block using WRITESAME10"); logging(LOG_VERBOSE, "Unmap 1 block using WRITESAME10");
memset(buf, 0, block_size);
ret = writesame10(iscsic, tgt_lun, 0, ret = writesame10(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
if (ret != 0) { if (ret != 0) {
logging(LOG_VERBOSE, "WRITESAME10 UNMAP is not available. " logging(LOG_VERBOSE, "WRITESAME10 UNMAP is not available. "

View File

@@ -41,6 +41,7 @@ test_writesame10_wrprotect(void)
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_SBC; CHECK_FOR_SBC;
memset(buf, 0, block_size);
if (!inq->protect || (rc16 != NULL && !rc16->prot_en)) { if (!inq->protect || (rc16 != NULL && !rc16->prot_en)) {
logging(LOG_VERBOSE, "Device does not support/use protection information. All commands should fail."); logging(LOG_VERBOSE, "Device does not support/use protection information. All commands should fail.");
for (i = 1; i < 8; i++) { for (i = 1; i < 8; i++) {

View File

@@ -29,14 +29,14 @@ void
test_writesame16_beyond_eol(void) test_writesame16_beyond_eol(void)
{ {
int i, ret; int i, ret;
unsigned char *buf = alloca(256 * block_size); unsigned char *buf = alloca(block_size);
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_SBC; CHECK_FOR_SBC;
logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, LOG_BLANK_LINE);
logging(LOG_VERBOSE, "Test WRITESAME16 1-256 blocks one block beyond the end"); logging(LOG_VERBOSE, "Test WRITESAME16 1-256 blocks one block beyond the end");
memset(buf, 0, block_size);
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
ret = writesame16_lbaoutofrange(iscsic, tgt_lun, num_blocks - i + 1, ret = writesame16_lbaoutofrange(iscsic, tgt_lun, num_blocks - i + 1,
block_size, i, block_size, i,

View File

@@ -31,7 +31,6 @@ test_writesame16_simple(void)
{ {
int i, ret; int i, ret;
unsigned char *buf = alloca(block_size); unsigned char *buf = alloca(block_size);
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_SBC; CHECK_FOR_SBC;
@@ -39,6 +38,7 @@ test_writesame16_simple(void)
logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, LOG_BLANK_LINE);
logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the start of the LUN"); logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the start of the LUN");
memset(buf, 0, block_size);
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
ret = writesame16(iscsic, tgt_lun, 0, ret = writesame16(iscsic, tgt_lun, 0,
block_size, i, block_size, i,

View File

@@ -30,8 +30,7 @@ test_writesame16_unmap(void)
{ {
int i, ret; int i, ret;
unsigned int j; unsigned int j;
unsigned char *buf = malloc(block_size * 65536); unsigned char *buf = malloc(65536 * block_size);
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_THIN_PROVISIONING; CHECK_FOR_THIN_PROVISIONING;
@@ -42,19 +41,19 @@ test_writesame16_unmap(void)
logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the start of the LUN"); logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the start of the LUN");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write16(iscsic, tgt_lun, 0, ret = write16(iscsic, tgt_lun, 0,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
memset(buf, 0, block_size);
ret = writesame16(iscsic, tgt_lun, 0, ret = writesame16(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
if (ret == -2) { if (ret == -2) {
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented."); logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test"); CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
free(buf);
return; return;
} }
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
@@ -82,13 +81,14 @@ test_writesame16_unmap(void)
logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the end of the LUN"); logging(LOG_VERBOSE, "Test WRITESAME16 of 1-256 blocks at the end of the LUN");
for (i = 1; i <= 256; i++) { for (i = 1; i <= 256; i++) {
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write16(iscsic, tgt_lun, num_blocks - i, ret = write16(iscsic, tgt_lun, num_blocks - i,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
memset(buf, 0, block_size);
ret = writesame16(iscsic, tgt_lun, num_blocks - i, ret = writesame16(iscsic, tgt_lun, num_blocks - i,
block_size, i, block_size, i,
0, 1, 0, 0, buf); 0, 1, 0, 0, buf);
@@ -116,21 +116,22 @@ test_writesame16_unmap(void)
logging(LOG_VERBOSE, "Verify that WRITESAME16 ANCHOR==1 + UNMAP==0 is invalid"); logging(LOG_VERBOSE, "Verify that WRITESAME16 ANCHOR==1 + UNMAP==0 is invalid");
ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
1, 0, 0, 0, NULL); 1, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
if (inq_lbp->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");
memset(buf, 0, block_size);
ret = writesame16(iscsic, tgt_lun, 0, ret = writesame16(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
1, 1, 0, 0, NULL); 1, 1, 0, 0, buf);
} else { } else {
logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0 no ANC_SUP so expecting to fail"); logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0 no ANC_SUP so expecting to fail");
ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
1, 1, 0, 0, NULL); 1, 1, 0, 0, buf);
} }
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
@@ -141,7 +142,6 @@ test_writesame16_unmap(void)
"BlockLimits VPD is missing."); "BlockLimits VPD is missing.");
CU_FAIL("[FAILED] WRITESAME16 works but " CU_FAIL("[FAILED] WRITESAME16 works but "
"BlockLimits VPD is missing."); "BlockLimits VPD is missing.");
free(buf);
return; return;
} }
@@ -153,16 +153,17 @@ test_writesame16_unmap(void)
"lengths"); "lengths");
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write16(iscsic, tgt_lun, 0, ret = write16(iscsic, tgt_lun, 0,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
memset(buf, 0, block_size);
ret = writesame16(iscsic, tgt_lun, 0, ret = writesame16(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
if (rc16->lbprz) { if (rc16->lbprz) {
@@ -191,12 +192,11 @@ test_writesame16_unmap(void)
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }
i = 65536; i = 65536;
if (inq_bl->max_ws_len == 0 || inq_bl->max_ws_len >= 256) { if (inq_bl->max_ws_len == 0 || inq_bl->max_ws_len >= 256) {
logging(LOG_VERBOSE, "Block Limits VPD page reports MAX_WS_LEN " logging(LOG_VERBOSE, "Block Limits VPD page reports MAX_WS_LEN "
@@ -205,16 +205,17 @@ test_writesame16_unmap(void)
"lengths"); "lengths");
logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i); logging(LOG_VERBOSE, "Write %d blocks of 0xFF", i);
memset(buf, 0xff, block_size * i); memset(buf, 0xff, i * block_size);
ret = write16(iscsic, tgt_lun, 0, ret = write16(iscsic, tgt_lun, 0,
i * block_size, block_size, i * block_size, block_size,
0, 0, 0, 0, 0, buf); 0, 0, 0, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
memset(buf, 0, block_size);
ret = writesame16(iscsic, tgt_lun, 0, ret = writesame16(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
if (rc16->lbprz) { if (rc16->lbprz) {
@@ -243,9 +244,8 @@ test_writesame16_unmap(void)
logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i); logging(LOG_VERBOSE, "Unmap %d blocks using WRITESAME16", i);
ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0, ret = writesame16_invalidfieldincdb(iscsic, tgt_lun, 0,
block_size, i, block_size, i,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
CU_ASSERT_EQUAL(ret, 0); CU_ASSERT_EQUAL(ret, 0);
} }
free(buf); free(buf);
} }

View File

@@ -16,6 +16,7 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <alloca.h>
#include <CUnit/CUnit.h> #include <CUnit/CUnit.h>
@@ -29,6 +30,7 @@ void
test_writesame16_unmap_vpd(void) test_writesame16_unmap_vpd(void)
{ {
int ret; int ret;
unsigned char *buf = alloca(block_size);
logging(LOG_VERBOSE, LOG_BLANK_LINE); logging(LOG_VERBOSE, LOG_BLANK_LINE);
logging(LOG_VERBOSE, "Test WRITESAME16 UNMAP availability is " logging(LOG_VERBOSE, "Test WRITESAME16 UNMAP availability is "
@@ -40,9 +42,10 @@ test_writesame16_unmap_vpd(void)
logging(LOG_VERBOSE, "Check if WRITESAME16 can be used for UNMAP."); logging(LOG_VERBOSE, "Check if WRITESAME16 can be used for UNMAP.");
logging(LOG_VERBOSE, "Unmap 1 block using WRITESAME16"); logging(LOG_VERBOSE, "Unmap 1 block using WRITESAME16");
memset(buf, 0, block_size);
ret = writesame16(iscsic, tgt_lun, 0, ret = writesame16(iscsic, tgt_lun, 0,
block_size, 1, block_size, 1,
0, 1, 0, 0, NULL); 0, 1, 0, 0, buf);
if (ret != 0) { if (ret != 0) {
logging(LOG_VERBOSE, "WRITESAME16 UNMAP is not available. " logging(LOG_VERBOSE, "WRITESAME16 UNMAP is not available. "

View File

@@ -41,6 +41,7 @@ test_writesame16_wrprotect(void)
CHECK_FOR_DATALOSS; CHECK_FOR_DATALOSS;
CHECK_FOR_SBC; CHECK_FOR_SBC;
memset(buf, 0, block_size);
if (!inq->protect || (rc16 != NULL && !rc16->prot_en)) { if (!inq->protect || (rc16 != NULL && !rc16->prot_en)) {
logging(LOG_VERBOSE, "Device does not support/use protection information. All commands should fail."); logging(LOG_VERBOSE, "Device does not support/use protection information. All commands should fail.");
for (i = 1; i < 8; i++) { for (i = 1; i < 8; i++) {