diff --git a/0002-test-tool-Compare-Write-skip-InvalidDataOutSize-unle.patch b/0002-test-tool-Compare-Write-skip-InvalidDataOutSize-unle.patch new file mode 100644 index 0000000000000000000000000000000000000000..a50fc5db833839e0f5ff8602a08b34419d932fde --- /dev/null +++ b/0002-test-tool-Compare-Write-skip-InvalidDataOutSize-unle.patch @@ -0,0 +1,35 @@ +From 60a5856f00731be578a57bfbf68b2e9858680f07 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:33:50 +0200 +Subject: [PATCH 01/12] test-tool/Compare&Write: skip InvalidDataOutSize unless + iSCSI + +This test performs PDU manipulation so should only be run against iSCSI +devices. + +Signed-off-by: David Disseldorp +--- + test-tool/test_compareandwrite_invalid_dataout_size.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/test-tool/test_compareandwrite_invalid_dataout_size.c b/test-tool/test_compareandwrite_invalid_dataout_size.c +index 4abd501..eb6a6dd 100644 +--- a/test-tool/test_compareandwrite_invalid_dataout_size.c ++++ b/test-tool/test_compareandwrite_invalid_dataout_size.c +@@ -53,6 +53,13 @@ test_compareandwrite_invalid_dataout_size(void) + CHECK_FOR_THIN_PROVISIONING; + CHECK_FOR_LBPPB_GT_1; + CHECK_FOR_SBC; ++ if (sd->iscsi_ctx == NULL) { ++ const char *err = "[SKIPPED] This test is " ++ "only supported for iSCSI backends"; ++ logging(LOG_NORMAL, "%s", err); ++ CU_PASS(err); ++ return; ++ } + + local_iscsi_queue_pdu = my_iscsi_queue_pdu; + +-- +1.8.3.1 + diff --git a/0003-test-tool-Compare-Write-override-driver-queue_pdu-ca.patch b/0003-test-tool-Compare-Write-override-driver-queue_pdu-ca.patch new file mode 100644 index 0000000000000000000000000000000000000000..9c0b720b9d9052317a6ad301e990e78bf557393c --- /dev/null +++ b/0003-test-tool-Compare-Write-override-driver-queue_pdu-ca.patch @@ -0,0 +1,67 @@ +From 310e9ace02bafb78d69bfe20e5c9befe7ed24a10 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 02/12] test-tool/Compare&Write: override driver queue_pdu() + callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert the Compare&Write InvalidDataOutSize test to use +the regular transport driver callback for this purpose. + +Signed-off-by: David Disseldorp +--- + test-tool/test_compareandwrite_invalid_dataout_size.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/test-tool/test_compareandwrite_invalid_dataout_size.c b/test-tool/test_compareandwrite_invalid_dataout_size.c +index eb6a6dd..9fcd739 100644 +--- a/test-tool/test_compareandwrite_invalid_dataout_size.c ++++ b/test-tool/test_compareandwrite_invalid_dataout_size.c +@@ -27,11 +27,12 @@ + + + static int new_tl; ++static struct iscsi_transport iscsi_drv_orig; + +-static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu *pdu _U_) ++static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { + if (pdu->outdata.data[0] != ISCSI_PDU_SCSI_REQUEST) { +- return 0; ++ goto out; + } + switch (new_tl) { + case 1: +@@ -43,7 +44,8 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu + pdu->outdata.data[32 + 13] = 3; + break; + } +- return 0; ++out: ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void +@@ -61,8 +63,10 @@ test_compareandwrite_invalid_dataout_size(void) + return; + } + +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; +- ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; ++ + logging(LOG_VERBOSE, LOG_BLANK_LINE); + logging(LOG_VERBOSE, "Test that COMPAREANDWRITE fails for invalid " + "(too small/too large) DataOut sizes."); +@@ -89,4 +93,6 @@ test_compareandwrite_invalid_dataout_size(void) + block_size, 0, 0, 0, 0, + EXPECT_STATUS_GENERIC_BAD); + ++ /* restore transport callbacks */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + } +-- +1.8.3.1 + diff --git a/0004-test-tool-iSCSICmdSnTooLow-override-driver-queue_pdu.patch b/0004-test-tool-iSCSICmdSnTooLow-override-driver-queue_pdu.patch new file mode 100644 index 0000000000000000000000000000000000000000..b396a4e30867a0a4a9911ff7a603357500e28ce1 --- /dev/null +++ b/0004-test-tool-iSCSICmdSnTooLow-override-driver-queue_pdu.patch @@ -0,0 +1,64 @@ +From c067eef9c10c17b8a9be83ee4f71d4c8d0d238e4 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 03/12] test-tool/iSCSICmdSnTooLow: override driver queue_pdu() + callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert this test to use the regular transport driver +callback for this purpose. + +Signed-off-by: David Disseldorp +--- + test-tool/test_iscsi_cmdsn_toolow.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/test-tool/test_iscsi_cmdsn_toolow.c b/test-tool/test_iscsi_cmdsn_toolow.c +index 0b980b3..23b93c3 100644 +--- a/test-tool/test_iscsi_cmdsn_toolow.c ++++ b/test-tool/test_iscsi_cmdsn_toolow.c +@@ -25,6 +25,7 @@ + #include "iscsi-test-cu.h" + + static int change_cmdsn; ++static struct iscsi_transport iscsi_drv_orig; + + static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { +@@ -40,7 +41,7 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu + } + + change_cmdsn = 0; +- return 0; ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void test_iscsi_cmdsn_toolow(void) +@@ -64,7 +65,9 @@ void test_iscsi_cmdsn_toolow(void) + + sd->iscsi_ctx->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + sd->iscsi_ctx->target_max_recv_data_segment_length = block_size; +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + change_cmdsn = 1; + /* we don't want autoreconnect since some targets will incorrectly + * drop the connection on this condition. +@@ -81,10 +84,11 @@ void test_iscsi_cmdsn_toolow(void) + logging(LOG_VERBOSE, "[FAILURE] We got a response from the target but SMDSN was outside of the window."); + } + +- +- + iscsi_set_noautoreconnect(sd->iscsi_ctx, 0); + logging(LOG_VERBOSE, "Send a TESTUNITREADY with CMDSN == EXPCMDSN. should work again"); + TESTUNITREADY(sd, + EXPECT_STATUS_GOOD); ++ ++ /* restore transport callbacks */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + } +-- +1.8.3.1 + diff --git a/0005-test-tool-iSCSICmdSnTooHigh-override-driver-queue_pd.patch b/0005-test-tool-iSCSICmdSnTooHigh-override-driver-queue_pd.patch new file mode 100644 index 0000000000000000000000000000000000000000..c63551c43b52996224ac39fdc0f5ed81c8ee6bd5 --- /dev/null +++ b/0005-test-tool-iSCSICmdSnTooHigh-override-driver-queue_pd.patch @@ -0,0 +1,63 @@ +From 575ba2244c5db240bc29fa493404eee39f693a2d Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 04/12] test-tool/iSCSICmdSnTooHigh: override driver + queue_pdu() callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert this test to use the regular transport driver +callback for this purpose. + +Signed-off-by: David Disseldorp +--- + test-tool/test_iscsi_cmdsn_toohigh.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/test-tool/test_iscsi_cmdsn_toohigh.c b/test-tool/test_iscsi_cmdsn_toohigh.c +index 59ce0ab..19c8b91 100644 +--- a/test-tool/test_iscsi_cmdsn_toohigh.c ++++ b/test-tool/test_iscsi_cmdsn_toohigh.c +@@ -25,6 +25,7 @@ + #include "iscsi-test-cu.h" + + static int change_cmdsn; ++static struct iscsi_transport iscsi_drv_orig; + + static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { +@@ -40,7 +41,7 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu + } + + change_cmdsn = 0; +- return 0; ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void test_iscsi_cmdsn_toohigh(void) +@@ -64,7 +65,9 @@ void test_iscsi_cmdsn_toohigh(void) + + sd->iscsi_ctx->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + sd->iscsi_ctx->target_max_recv_data_segment_length = block_size; +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + change_cmdsn = 1; + /* we don't want autoreconnect since some targets will incorrectly + * drop the connection on this condition. +@@ -81,9 +84,11 @@ void test_iscsi_cmdsn_toohigh(void) + logging(LOG_VERBOSE, "[FAILURE] We got a response from the target but SMDSN was outside of the window."); + } + +- + iscsi_set_noautoreconnect(sd->iscsi_ctx, 0); + logging(LOG_VERBOSE, "Send a TESTUNITREADY with CMDSN == EXPCMDSN. should work again"); + TESTUNITREADY(sd, + EXPECT_STATUS_GOOD); ++ ++ /* restore transport callbacks */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + } +-- +1.8.3.1 + diff --git a/0006-test-tool-iSCSIDataSnInvalid-override-driver-queue_p.patch b/0006-test-tool-iSCSIDataSnInvalid-override-driver-queue_p.patch new file mode 100644 index 0000000000000000000000000000000000000000..daf9f7d424ff8593285cbc9d2617b7c9cf279e8b --- /dev/null +++ b/0006-test-tool-iSCSIDataSnInvalid-override-driver-queue_p.patch @@ -0,0 +1,161 @@ +From 153ca193fa61be8c2c26d8736119e7dc873d1242 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 05/12] test-tool/iSCSIDataSnInvalid: override driver + queue_pdu() callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert this test to use the regular transport driver +callback for this purpose. +This commit also removes a number of unnecessary "WRITE10 is not +implemented" checks, which should all be caught by the first check. + +Signed-off-by: David Disseldorp +--- + test-tool/test_iscsi_datasn_invalid.c | 56 +++++++++++++---------------------- + 1 file changed, 21 insertions(+), 35 deletions(-) + +diff --git a/test-tool/test_iscsi_datasn_invalid.c b/test-tool/test_iscsi_datasn_invalid.c +index 14deb7a..c25631a 100644 +--- a/test-tool/test_iscsi_datasn_invalid.c ++++ b/test-tool/test_iscsi_datasn_invalid.c +@@ -25,13 +25,14 @@ + #include "iscsi-test-cu.h" + + static int change_datasn; ++static struct iscsi_transport iscsi_drv_orig; + +-static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu *pdu _U_) ++static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { + uint32_t datasn; + + if (pdu->outdata.data[0] != ISCSI_PDU_DATA_OUT) { +- return 0; ++ goto out; + } + switch (change_datasn) { + case 1: +@@ -52,11 +53,12 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu + scsi_set_uint32(&pdu->outdata.data[36], 1 - datasn); + break; + } +- return 0; ++out: ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void test_iscsi_datasn_invalid(void) +-{ ++{ + int ret; + + CHECK_FOR_DATALOSS; +@@ -77,7 +79,9 @@ void test_iscsi_datasn_invalid(void) + + sd->iscsi_ctx->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + sd->iscsi_ctx->target_max_recv_data_segment_length = block_size; +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 1); + iscsi_set_timeout(sd->iscsi_ctx, 3); + +@@ -89,81 +93,63 @@ void test_iscsi_datasn_invalid(void) + if (ret == -2) { + logging(LOG_NORMAL, "[SKIPPED] WRITE10 is not implemented."); + CU_PASS("WRITE10 is not implemented."); +- local_iscsi_queue_pdu = NULL; +- return; +- } ++ goto out_ctx_restore; ++ } + CU_ASSERT_NOT_EQUAL(ret, 0); + ++ /* avoid changing DataSN during reconnect */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 0); + +- + logging(LOG_VERBOSE, "Send Data-Out PDU with DataSN==27. Should fail"); + change_datasn = 2; + + sd->iscsi_ctx->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + sd->iscsi_ctx->target_max_recv_data_segment_length = block_size; +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 1); + iscsi_set_timeout(sd->iscsi_ctx, 3); + + ret = write10(sd, 100, block_size, + block_size, 0, 0, 0, 0, 0, scratch, + EXPECT_STATUS_GOOD); +- if (ret == -2) { +- logging(LOG_NORMAL, "[SKIPPED] WRITE10 is not implemented."); +- CU_PASS("WRITE10 is not implemented."); +- local_iscsi_queue_pdu = NULL; +- return; +- } + CU_ASSERT_NOT_EQUAL(ret, 0); + ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 0); + +- + logging(LOG_VERBOSE, "Send Data-Out PDU with DataSN==-1. Should fail"); + change_datasn = 3; + + sd->iscsi_ctx->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + sd->iscsi_ctx->target_max_recv_data_segment_length = block_size; +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 1); + iscsi_set_timeout(sd->iscsi_ctx, 3); + + ret = write10(sd, 100, block_size, + block_size, 0, 0, 0, 0, 0, scratch, + EXPECT_STATUS_GOOD); +- if (ret == -2) { +- logging(LOG_NORMAL, "[SKIPPED] WRITE10 is not implemented."); +- CU_PASS("WRITE10 is not implemented."); +- local_iscsi_queue_pdu = NULL; +- return; +- } + CU_ASSERT_NOT_EQUAL(ret, 0); + ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 0); + +- +- + logging(LOG_VERBOSE, "Send Data-Out PDU's in reverse order (DataSN == 1,0). Should fail"); + change_datasn = 4; + + sd->iscsi_ctx->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + sd->iscsi_ctx->target_max_recv_data_segment_length = block_size; +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 1); + iscsi_set_timeout(sd->iscsi_ctx, 3); + + ret = write10(sd, 100, 2 * block_size, + block_size, 0, 0, 0, 0, 0, scratch, + EXPECT_STATUS_GOOD); +- if (ret == -2) { +- logging(LOG_NORMAL, "[SKIPPED] WRITE10 is not implemented."); +- CU_PASS("WRITE10 is not implemented."); +- local_iscsi_queue_pdu = NULL; +- return; +- } + CU_ASSERT_NOT_EQUAL(ret, 0); +- +- local_iscsi_queue_pdu = NULL; ++out_ctx_restore: ++ /* restore transport callbacks and autoreconnect */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + iscsi_set_noautoreconnect(sd->iscsi_ctx, 0); + } +-- +1.8.3.1 + diff --git a/0007-test-tool-BlockEraseReserved-skip-unless-iSCSI.patch b/0007-test-tool-BlockEraseReserved-skip-unless-iSCSI.patch new file mode 100644 index 0000000000000000000000000000000000000000..8b85e308c3fc0b0daf823f5e4a96dd5726c3780d --- /dev/null +++ b/0007-test-tool-BlockEraseReserved-skip-unless-iSCSI.patch @@ -0,0 +1,34 @@ +From fdc45fadfa06f2543a12abe8eefe7f87d5dab0c2 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 15:40:00 +0200 +Subject: [PATCH 06/12] test-tool/BlockEraseReserved: skip unless iSCSI + +This test performs PDU manipulation so should only be run against iSCSI +devices. + +Signed-off-by: David Disseldorp +--- + test-tool/test_sanitize_block_erase_reserved.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/test-tool/test_sanitize_block_erase_reserved.c b/test-tool/test_sanitize_block_erase_reserved.c +index 55c85d9..fcb862e 100644 +--- a/test-tool/test_sanitize_block_erase_reserved.c ++++ b/test-tool/test_sanitize_block_erase_reserved.c +@@ -56,6 +56,13 @@ void test_sanitize_block_erase_reserved(void) + + CHECK_FOR_SANITIZE; + CHECK_FOR_DATALOSS; ++ if (sd->iscsi_ctx == NULL) { ++ const char *err = "[SKIPPED] This test is " ++ "only supported for iSCSI backends"; ++ logging(LOG_NORMAL, "%s", err); ++ CU_PASS(err); ++ return; ++ } + + local_iscsi_queue_pdu = my_iscsi_queue_pdu; + +-- +1.8.3.1 + diff --git a/0008-test-tool-BlockEraseReserved-override-driver-queue_p.patch b/0008-test-tool-BlockEraseReserved-override-driver-queue_p.patch new file mode 100644 index 0000000000000000000000000000000000000000..571cd66df20728c30fd2bc7515570e0427befb3b --- /dev/null +++ b/0008-test-tool-BlockEraseReserved-override-driver-queue_p.patch @@ -0,0 +1,69 @@ +From b705f9e5240583fb862f16d603e5cf2120e5d54c Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 07/12] test-tool/BlockEraseReserved: override driver + queue_pdu() callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert this test to use the regular transport driver +callback for this purpose. + +Signed-off-by: David Disseldorp +--- + test-tool/test_sanitize_block_erase_reserved.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/test-tool/test_sanitize_block_erase_reserved.c b/test-tool/test_sanitize_block_erase_reserved.c +index fcb862e..4a0d2cb 100644 +--- a/test-tool/test_sanitize_block_erase_reserved.c ++++ b/test-tool/test_sanitize_block_erase_reserved.c +@@ -25,8 +25,9 @@ + #include "iscsi-test-cu.h" + + static int change_num; ++static struct iscsi_transport iscsi_drv_orig; + +-static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu *pdu) ++static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { + switch (change_num) { + case 1: +@@ -43,12 +44,12 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu + break; + } + +- change_num = 0; +- return 0; ++ change_num = 0; ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void test_sanitize_block_erase_reserved(void) +-{ ++{ + int i; + + logging(LOG_VERBOSE, LOG_BLANK_LINE); +@@ -64,8 +65,9 @@ void test_sanitize_block_erase_reserved(void) + return; + } + +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; +- ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + + logging(LOG_VERBOSE, "Send SANITIZE command with the reserved " + "bit in byte 1 set to 1"); +@@ -81,4 +83,7 @@ void test_sanitize_block_erase_reserved(void) + SANITIZE(sd, 0, 0, SCSI_SANITIZE_BLOCK_ERASE, 0, NULL, + EXPECT_INVALID_FIELD_IN_CDB); + } ++ ++ /* restore transport callbacks */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + } +-- +1.8.3.1 + diff --git a/0009-test-tool-CryptoEraseReserved-skip-unless-iSCSI.patch b/0009-test-tool-CryptoEraseReserved-skip-unless-iSCSI.patch new file mode 100644 index 0000000000000000000000000000000000000000..8e9099f93f0769460222c7a876f7761ee38befe1 --- /dev/null +++ b/0009-test-tool-CryptoEraseReserved-skip-unless-iSCSI.patch @@ -0,0 +1,34 @@ +From c830a3b55e91fe8b1cb97e6899ef872691c8804e Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 15:40:00 +0200 +Subject: [PATCH 08/12] test-tool/CryptoEraseReserved: skip unless iSCSI + +This test performs PDU manipulation so should only be run against iSCSI +devices. + +Signed-off-by: David Disseldorp +--- + test-tool/test_sanitize_crypto_erase_reserved.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/test-tool/test_sanitize_crypto_erase_reserved.c b/test-tool/test_sanitize_crypto_erase_reserved.c +index c713ab5..00bbf34 100644 +--- a/test-tool/test_sanitize_crypto_erase_reserved.c ++++ b/test-tool/test_sanitize_crypto_erase_reserved.c +@@ -56,6 +56,13 @@ void test_sanitize_crypto_erase_reserved(void) + + CHECK_FOR_SANITIZE; + CHECK_FOR_DATALOSS; ++ if (sd->iscsi_ctx == NULL) { ++ const char *err = "[SKIPPED] This test is " ++ "only supported for iSCSI backends"; ++ logging(LOG_NORMAL, "%s", err); ++ CU_PASS(err); ++ return; ++ } + + local_iscsi_queue_pdu = my_iscsi_queue_pdu; + +-- +1.8.3.1 + diff --git a/0010-test-tool-CryptoEraseReserved-override-driver-queue_.patch b/0010-test-tool-CryptoEraseReserved-override-driver-queue_.patch new file mode 100644 index 0000000000000000000000000000000000000000..f93876c8614e3a72e0ef47aff6ecd10f7ff8c6f2 --- /dev/null +++ b/0010-test-tool-CryptoEraseReserved-override-driver-queue_.patch @@ -0,0 +1,69 @@ +From 77279dd44fd19167c22cfada2eec377058e1bde9 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 09/12] test-tool/CryptoEraseReserved: override driver + queue_pdu() callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert this test to use the regular transport driver +callback for this purpose. + +Signed-off-by: David Disseldorp +--- + test-tool/test_sanitize_crypto_erase_reserved.c | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/test-tool/test_sanitize_crypto_erase_reserved.c b/test-tool/test_sanitize_crypto_erase_reserved.c +index 00bbf34..646cbea 100644 +--- a/test-tool/test_sanitize_crypto_erase_reserved.c ++++ b/test-tool/test_sanitize_crypto_erase_reserved.c +@@ -25,8 +25,9 @@ + #include "iscsi-test-cu.h" + + static int change_num; ++static struct iscsi_transport iscsi_drv_orig; + +-static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu *pdu) ++static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { + switch (change_num) { + case 1: +@@ -43,12 +44,12 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu + break; + } + +- change_num = 0; +- return 0; ++ change_num = 0; ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void test_sanitize_crypto_erase_reserved(void) +-{ ++{ + int i; + + logging(LOG_VERBOSE, LOG_BLANK_LINE); +@@ -64,8 +65,9 @@ void test_sanitize_crypto_erase_reserved(void) + return; + } + +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; +- ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + + logging(LOG_VERBOSE, "Send SANITIZE command with the reserved " + "bit in byte 1 set to 1"); +@@ -81,4 +83,7 @@ void test_sanitize_crypto_erase_reserved(void) + SANITIZE(sd, 0, 0, SCSI_SANITIZE_CRYPTO_ERASE, 0, NULL, + EXPECT_INVALID_FIELD_IN_CDB); + } ++ ++ /* restore transport callbacks */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + } +-- +1.8.3.1 + diff --git a/0011-test-tool-OverwriteReserved-skip-unless-iSCSI.patch b/0011-test-tool-OverwriteReserved-skip-unless-iSCSI.patch new file mode 100644 index 0000000000000000000000000000000000000000..b3338004fed9f9efb6fcf1cf1b4cda18c2475ae2 --- /dev/null +++ b/0011-test-tool-OverwriteReserved-skip-unless-iSCSI.patch @@ -0,0 +1,34 @@ +From e5cc079e7c2678997b3aa157331ebf34c8b10932 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 15:40:00 +0200 +Subject: [PATCH 10/12] test-tool/OverwriteReserved: skip unless iSCSI + +This test performs PDU manipulation so should only be run against iSCSI +devices. + +Signed-off-by: David Disseldorp +--- + test-tool/test_sanitize_overwrite_reserved.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/test-tool/test_sanitize_overwrite_reserved.c b/test-tool/test_sanitize_overwrite_reserved.c +index 20a0779..79f8a92 100644 +--- a/test-tool/test_sanitize_overwrite_reserved.c ++++ b/test-tool/test_sanitize_overwrite_reserved.c +@@ -67,6 +67,13 @@ void test_sanitize_overwrite_reserved(void) + + CHECK_FOR_SANITIZE; + CHECK_FOR_DATALOSS; ++ if (sd->iscsi_ctx == NULL) { ++ const char *err = "[SKIPPED] This test is " ++ "only supported for iSCSI backends"; ++ logging(LOG_NORMAL, "%s", err); ++ CU_PASS(err); ++ return; ++ } + + local_iscsi_queue_pdu = my_iscsi_queue_pdu; + +-- +1.8.3.1 + diff --git a/0012-test-tool-OverwriteReserved-override-driver-queue_pd.patch b/0012-test-tool-OverwriteReserved-override-driver-queue_pd.patch new file mode 100644 index 0000000000000000000000000000000000000000..dc152ab64cfba38577ebcc35857ad63572c45f85 --- /dev/null +++ b/0012-test-tool-OverwriteReserved-override-driver-queue_pd.patch @@ -0,0 +1,68 @@ +From 2ae45ac15d8c1d4a4f68a085dadb7f43e2f2e280 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 14:46:28 +0200 +Subject: [PATCH 11/12] test-tool/OverwriteReserved: override driver + queue_pdu() callback + +In preparation for removing the test-tool iscsi_queue_pdu() dlsym +overload hack, convert this test to use the regular transport driver +callback for this purpose. + +Signed-off-by: David Disseldorp +--- + test-tool/test_sanitize_overwrite_reserved.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/test-tool/test_sanitize_overwrite_reserved.c b/test-tool/test_sanitize_overwrite_reserved.c +index 79f8a92..91090b4 100644 +--- a/test-tool/test_sanitize_overwrite_reserved.c ++++ b/test-tool/test_sanitize_overwrite_reserved.c +@@ -26,8 +26,9 @@ + #include "iscsi-test-cu.h" + + static int change_num; ++static struct iscsi_transport iscsi_drv_orig; + +-static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu *pdu) ++static int my_iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) + { + switch (change_num) { + case 1: +@@ -44,12 +45,12 @@ static int my_iscsi_queue_pdu(struct iscsi_context *iscsi _U_, struct iscsi_pdu + break; + } + +- change_num = 0; +- return 0; ++ change_num = 0; ++ return iscsi_drv_orig.queue_pdu(iscsi, pdu); + } + + void test_sanitize_overwrite_reserved(void) +-{ ++{ + int i; + struct iscsi_data data; + +@@ -75,7 +76,9 @@ void test_sanitize_overwrite_reserved(void) + return; + } + +- local_iscsi_queue_pdu = my_iscsi_queue_pdu; ++ /* override transport queue_pdu callback for PDU manipulation */ ++ iscsi_drv_orig = *sd->iscsi_ctx->drv; ++ sd->iscsi_ctx->drv->queue_pdu = my_iscsi_queue_pdu; + + logging(LOG_VERBOSE, "Send SANITIZE command with the reserved " + "bit in byte 1 set to 1"); +@@ -91,4 +94,7 @@ void test_sanitize_overwrite_reserved(void) + SANITIZE(sd, 0, 0, SCSI_SANITIZE_OVERWRITE, data.size, &data, + EXPECT_INVALID_FIELD_IN_CDB); + } ++ ++ /* restore transport callbacks */ ++ *(sd->iscsi_ctx->drv) = iscsi_drv_orig; + } +-- +1.8.3.1 + diff --git a/0013-test-tool-remove-unused-iscsi_queue_pdu-symbol-overl.patch b/0013-test-tool-remove-unused-iscsi_queue_pdu-symbol-overl.patch new file mode 100644 index 0000000000000000000000000000000000000000..42776ab82fe90eadfb6f5897d310e51c65bb2d54 --- /dev/null +++ b/0013-test-tool-remove-unused-iscsi_queue_pdu-symbol-overl.patch @@ -0,0 +1,100 @@ +From dd17293bcc188dbefc420ee23b77bc9bb7c5e9a2 Mon Sep 17 00:00:00 2001 +From: David Disseldorp +Date: Mon, 16 Sep 2019 16:02:36 +0200 +Subject: [PATCH 12/12] test-tool: remove unused iscsi_queue_pdu() symbol + overload + +All users have now been changed to overload via the iscsi_ctx transport +callback, so the dlsym based overloading can now be dropped. + +Signed-off-by: David Disseldorp +--- + test-tool/iscsi-support.c | 11 ----------- + test-tool/iscsi-support.h | 1 - + test-tool/iscsi-test-cu.c | 15 --------------- + 3 files changed, 27 deletions(-) + +diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c +index 4b49478..169d2b0 100644 +--- a/test-tool/iscsi-support.c ++++ b/test-tool/iscsi-support.c +@@ -119,8 +119,6 @@ int readonly; + int sbc3_support; + int maximum_transfer_length; + +-int (*real_iscsi_queue_pdu)(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); +- + static const unsigned char zeroBlock[4096]; + + /** +@@ -570,15 +568,6 @@ wait_until_test_finished(struct iscsi_context *iscsi, struct iscsi_async_state * + } + + int +-iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) +-{ +- if (local_iscsi_queue_pdu != NULL) { +- local_iscsi_queue_pdu(iscsi, pdu); +- } +- return real_iscsi_queue_pdu(iscsi, pdu); +-} +- +-int + orwrite(struct scsi_device *sdev, uint64_t lba, + uint32_t datalen, int blocksize, int wrprotect, + int dpo, int fua, int fua_nv, int group, +diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h +index aee00ca..2b20a1f 100644 +--- a/test-tool/iscsi-support.h ++++ b/test-tool/iscsi-support.h +@@ -782,7 +782,6 @@ struct iscsi_async_state { + void wait_until_test_finished(struct iscsi_context *iscsi, struct iscsi_async_state *test_state); + + struct iscsi_pdu; +-int (*local_iscsi_queue_pdu)(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); + + struct scsi_command_descriptor *get_command_descriptor(int opcode, int sa); + +diff --git a/test-tool/iscsi-test-cu.c b/test-tool/iscsi-test-cu.c +index eafda39..26e1b05 100644 +--- a/test-tool/iscsi-test-cu.c ++++ b/test-tool/iscsi-test-cu.c +@@ -59,12 +59,6 @@ int loglevel = LOG_NORMAL; + struct scsi_device *sd = NULL; /* mp_sds[0] alias */ + static unsigned int maxsectors; + +-/* +- * this allows us to redefine how PDU are queued, at times, for +- * testing purposes +- */ +-int (*real_iscsi_queue_pdu)(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); +- + /***************************************************************** + * + * list of tests and test suites +@@ -805,7 +799,6 @@ test_setup(void) + { + task = NULL; + read_write_buf = NULL; +- local_iscsi_queue_pdu = NULL; + } + + void +@@ -1214,14 +1207,6 @@ main(int argc, char *argv[]) + mp_num_sds++; + } + +- /* So that we can override iscsi_queue_pdu in tests +- * and replace or mutate the blob that we are about to write to the +- * wire. +- * This allows such tests to do their mutates and then call out +- * to the real queueing function once they have modified the data. +- */ +- real_iscsi_queue_pdu = dlsym(RTLD_NEXT, "iscsi_queue_pdu"); +- + if ((mp_num_sds == 0) || (mp_sds[0]->iscsi_url == NULL + && mp_sds[0]->sgio_dev == NULL)) { + #ifdef HAVE_SG_IO +-- +1.8.3.1 + diff --git a/0014-iser-remove-__packed-from-struct-iser_cm_hdr-declaration.patch b/0014-iser-remove-__packed-from-struct-iser_cm_hdr-declaration.patch new file mode 100644 index 0000000000000000000000000000000000000000..b76a6e0f0ef5642ff5cade8ad042f2d4eca89329 --- /dev/null +++ b/0014-iser-remove-__packed-from-struct-iser_cm_hdr-declaration.patch @@ -0,0 +1,27 @@ +From 51391285d85955c6d33f2a4bfe86602eb5d230fb Mon Sep 17 00:00:00 2001 +From: wanghonghao +Date: Thu, 5 Dec 2019 18:59:18 +0800 +Subject: [PATCH] iser: remove `__packed` from struct iser_cm_hdr declaration + +`__packed` is not defined previously, and was treated as a varible +declaration. + +Signed-off-by: wanghonghao +--- + include/iser-private.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/iser-private.h b/include/iser-private.h +index b8b38db7..b943d34a 100644 +--- a/include/iser-private.h ++++ b/include/iser-private.h +@@ -158,7 +158,7 @@ struct iser_tx_desc { + struct iser_cm_hdr { + uint8_t flags; + uint8_t rsvd[3]; +-} __packed; ++}; + + struct iser_pdu { + struct iscsi_pdu iscsi_pdu; +-- diff --git a/0015-test-tools-use-extern-init-in-headers.patch b/0015-test-tools-use-extern-init-in-headers.patch new file mode 100644 index 0000000000000000000000000000000000000000..3a60dc0caf9a192db503f221b4b674bb76d2e260 --- /dev/null +++ b/0015-test-tools-use-extern-init-in-headers.patch @@ -0,0 +1,51 @@ +From ea89dcdbf167acd634300296172926c2e8d85804 Mon Sep 17 00:00:00 2001 +From: Cole Robinson +Date: Sat, 15 Feb 2020 18:03:11 -0500 +Subject: [PATCH] test-tool: Use 'extern int' in headers + +Without this, linking fails on Fedora rawhide. Example: + +... +/usr/bin/ld: test_async_lu_reset_simple.o:/root/libiscsi/libiscsi.git/test-tool/iscsi-support.h:59: multiple definition of `param_list_len_err_ascqs'; iscsi-test-cu.o:/root/libiscsi/libiscsi.git/test-tool/iscsi-support.h:59: first defined here +/usr/bin/ld: test_async_lu_reset_simple.o:/root/libiscsi/libiscsi.git/test-tool/iscsi-support.h:58: multiple definition of `invalid_cdb_ascqs'; iscsi-test-cu.o:/root/libiscsi/libiscsi.git/test-tool/iscsi-support.h:58: first defined here +... + +Signed-off-by: Cole Robinson +--- + test-tool/iscsi-support.h | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h +index 7aa9e45c..9c3a4612 100644 +--- a/test-tool/iscsi-support.h ++++ b/test-tool/iscsi-support.h +@@ -53,17 +53,17 @@ extern const char *initiatorname2; + #define EXPECT_RESERVATION_CONFLICT SCSI_STATUS_RESERVATION_CONFLICT, 0, NULL, 0 + #define EXPECT_COPY_ABORTED SCSI_STATUS_CHECK_CONDITION, SCSI_SENSE_COPY_ABORTED, copy_aborted_ascqs, 3 + +-int no_medium_ascqs[3]; +-int lba_oob_ascqs[1]; +-int invalid_cdb_ascqs[2]; +-int param_list_len_err_ascqs[1]; +-int too_many_desc_ascqs[2]; +-int unsupp_desc_code_ascqs[2]; +-int write_protect_ascqs[3]; +-int sanitize_ascqs[1]; +-int removal_ascqs[1]; +-int miscompare_ascqs[1]; +-int copy_aborted_ascqs[3]; ++extern int no_medium_ascqs[3]; ++extern int lba_oob_ascqs[1]; ++extern int invalid_cdb_ascqs[2]; ++extern int param_list_len_err_ascqs[1]; ++extern int too_many_desc_ascqs[2]; ++extern int unsupp_desc_code_ascqs[2]; ++extern int write_protect_ascqs[3]; ++extern int sanitize_ascqs[1]; ++extern int removal_ascqs[1]; ++extern int miscompare_ascqs[1]; ++extern int copy_aborted_ascqs[3]; + + extern int loglevel; + #define LOG_SILENT 0 +-- diff --git a/libiscsi.spec b/libiscsi.spec index 4d1426c93a476952b999abce391d7b6efc9dee52..12fb9e380b3f3e28e3b4cb9dbbf3f8b812f08eb1 100644 --- a/libiscsi.spec +++ b/libiscsi.spec @@ -1,12 +1,26 @@ Name: libiscsi Version: 1.19.0 -Release: 4 +Release: 5 Summary: Client-side library to implement the iSCSI protocol Recommends: %{name}-utils License: LGPLv2+ and GPLv2+ URL: https://github.com/sahlberg/%{name} Patch1: 0001-iscsi-ls-Fix-iser-url-scheme-parsing.patch +Patch2: 0002-test-tool-Compare-Write-skip-InvalidDataOutSize-unle.patch +Patch3: 0003-test-tool-Compare-Write-override-driver-queue_pdu-ca.patch +Patch4: 0004-test-tool-iSCSICmdSnTooLow-override-driver-queue_pdu.patch +Patch5: 0005-test-tool-iSCSICmdSnTooHigh-override-driver-queue_pd.patch +Patch6: 0006-test-tool-iSCSIDataSnInvalid-override-driver-queue_p.patch +Patch7: 0007-test-tool-BlockEraseReserved-skip-unless-iSCSI.patch +Patch8: 0008-test-tool-BlockEraseReserved-override-driver-queue_p.patch +Patch9: 0009-test-tool-CryptoEraseReserved-skip-unless-iSCSI.patch +Patch10: 0010-test-tool-CryptoEraseReserved-override-driver-queue_.patch +Patch11: 0011-test-tool-OverwriteReserved-skip-unless-iSCSI.patch +Patch12: 0012-test-tool-OverwriteReserved-override-driver-queue_pd.patch +Patch13: 0013-test-tool-remove-unused-iscsi_queue_pdu-symbol-overl.patch +Patch14: 0014-iser-remove-__packed-from-struct-iser_cm_hdr-declaration.patch +Patch15: 0015-test-tools-use-extern-init-in-headers.patch Source: https://github.com/sahlberg/%{name}/archive/%{version}.tar.gz @@ -108,6 +122,9 @@ This package contains utilities of %{name} to connect to iSCSI targets %{_bindir}/iscsi-test-cu %changelog +* Fri Jul 30 2021 yanglongkang - 1.19.0-5 +- fix multiple define for gcc10 + * Fri Nov 20 2020 haowenchao - 1.19.0-4 - Split rpm package to avoid main rpm package CUnit dependency Previous implement place executable files in main package which leading