TESTS: Remove some READCAPACITY16 we no longer need
This commit is contained in:
@@ -24,7 +24,6 @@ int T0170_unmap_simple(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
|
|
||||||
printf("0170_unmap_simple:\n");
|
printf("0170_unmap_simple:\n");
|
||||||
@@ -43,36 +42,12 @@ int T0170_unmap_simple(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
if (lbpme == 0){
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc16->lbpme == 0){
|
|
||||||
printf("Logical unit is fully provisioned. Skipping test\n");
|
printf("Logical unit is fully provisioned. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (!data_loss) {
|
if (!data_loss) {
|
||||||
printf("data_loss flag is not set. Skipping test\n");
|
printf("data_loss flag is not set. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ int T0171_unmap_zero(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
|
|
||||||
printf("0171_unmap_zero:\n");
|
printf("0171_unmap_zero:\n");
|
||||||
@@ -45,36 +44,12 @@ int T0171_unmap_zero(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
if (lbpme == 0){
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc16->lbpme == 0){
|
|
||||||
printf("Logical unit is fully provisioned. Skipping test\n");
|
printf("Logical unit is fully provisioned. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (!data_loss) {
|
if (!data_loss) {
|
||||||
printf("data_loss flag is not set. Skipping test\n");
|
printf("data_loss flag is not set. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
|
|||||||
@@ -24,12 +24,9 @@ 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;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int full_size;
|
int full_size;
|
||||||
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
int lbppb;
|
|
||||||
int lbpme;
|
|
||||||
int lbpws10 = 0;
|
int lbpws10 = 0;
|
||||||
int anc_sup = 0;
|
int anc_sup = 0;
|
||||||
|
|
||||||
@@ -54,34 +51,8 @@ int T0180_writesame10_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
/* find the size of the LUN */
|
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
lbppb = 1 << rc16->lbppbe;
|
|
||||||
lbpme = rc16->lbpme;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (lbpme == 0){
|
if (lbpme == 0){
|
||||||
printf("Logical unit is fully provisioned. All commands should fail with check condition.\n");
|
printf("Logical unit is fully provisioned. All commands should fail with check condition.\n");
|
||||||
goto finished;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check that id we have logical block provisioning we also have the VPD page for it */
|
/* Check that id we have logical block provisioning we also have the VPD page for it */
|
||||||
|
|||||||
@@ -24,9 +24,7 @@ int T0181_writesame10_unmap_unaligned(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
int lbppb;
|
|
||||||
|
|
||||||
printf("0181_writesame10_unmap_unaligned:\n");
|
printf("0181_writesame10_unmap_unaligned:\n");
|
||||||
printf("=================================\n");
|
printf("=================================\n");
|
||||||
@@ -43,37 +41,12 @@ int T0181_writesame10_unmap_unaligned(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
if (lbpme == 0){
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc16->lbpme == 0){
|
|
||||||
printf("Logical unit is fully provisioned. Skipping test\n");
|
printf("Logical unit is fully provisioned. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
lbppb = 1 << rc16->lbppbe;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (lbppb < 2) {
|
if (lbppb < 2) {
|
||||||
printf("LBPPB==%d Can not unmap fractional physical block\n", lbppb);
|
printf("LBPPB==%d Can not unmap fractional physical block\n", lbppb);
|
||||||
|
|||||||
@@ -24,12 +24,9 @@ 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;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int full_size;
|
int full_size;
|
||||||
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
struct scsi_inquiry_logical_block_provisioning *inq_lbp;
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
int lbppb;
|
|
||||||
int lbpme;
|
|
||||||
int lbpws = 0;
|
int lbpws = 0;
|
||||||
int anc_sup = 0;
|
int anc_sup = 0;
|
||||||
|
|
||||||
@@ -54,32 +51,6 @@ int T0190_writesame16_unmap(const char *initiator, const char *url)
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
/* find the size of the LUN */
|
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
lbppb = 1 << rc16->lbppbe;
|
|
||||||
lbpme = rc16->lbpme;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (lbpme == 0) {
|
if (lbpme == 0) {
|
||||||
printf("LBPME not set. Skip test for CPD page 0xB2 (logical block provisioning)\n");
|
printf("LBPME not set. Skip test for CPD page 0xB2 (logical block provisioning)\n");
|
||||||
goto finished;
|
goto finished;
|
||||||
|
|||||||
@@ -24,9 +24,7 @@ int T0191_writesame16_unmap_unaligned(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int ret, i, lun;
|
int ret, i, lun;
|
||||||
int lbppb;
|
|
||||||
|
|
||||||
printf("0191_writesame16_unmap_unaligned:\n");
|
printf("0191_writesame16_unmap_unaligned:\n");
|
||||||
printf("=================================\n");
|
printf("=================================\n");
|
||||||
@@ -43,38 +41,12 @@ int T0191_writesame16_unmap_unaligned(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
if (lbpme == 0){
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc16->lbpme == 0){
|
|
||||||
printf("Logical unit is fully provisioned. Skipping test\n");
|
printf("Logical unit is fully provisioned. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
lbppb = 1 << rc16->lbppbe;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (lbppb < 2) {
|
if (lbppb < 2) {
|
||||||
printf("LBPPB==%d Can not unmap fractional physical block\n", lbppb);
|
printf("LBPPB==%d Can not unmap fractional physical block\n", lbppb);
|
||||||
ret = -2;
|
ret = -2;
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ int T0260_get_lba_status_simple(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int ret, lun;
|
int ret, lun;
|
||||||
|
|
||||||
printf("0260_get_lba_status_simple:\n");
|
printf("0260_get_lba_status_simple:\n");
|
||||||
@@ -43,36 +42,12 @@ int T0260_get_lba_status_simple(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
if (lbpme == 0){
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send readcapacity16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("Readcapacity command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall readcapacity16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc16->lbpme == 0){
|
|
||||||
printf("Logical unit is fully provisioned. Skipping test\n");
|
printf("Logical unit is fully provisioned. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
/* try reading one descriptor at offset 0 */
|
/* try reading one descriptor at offset 0 */
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ int T0264_get_lba_status_beyondeol(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
int ret, lun;
|
int ret, lun;
|
||||||
|
|
||||||
printf("0264_get_lba_status_beyondeol:\n");
|
printf("0264_get_lba_status_beyondeol:\n");
|
||||||
@@ -42,34 +41,11 @@ int T0264_get_lba_status_beyondeol(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
if (lbpme == 0){
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send READCAPACITY16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("READCAPACITY16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall READCAPACITY16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc16->lbpme == 0){
|
|
||||||
printf("Logical unit is fully provisioned. Skipping test\n");
|
printf("Logical unit is fully provisioned. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -24,13 +24,11 @@ int T0300_readonly(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
struct scsi_inquiry_standard *inq;
|
struct scsi_inquiry_standard *inq;
|
||||||
struct scsi_mode_sense *ms;
|
struct scsi_mode_sense *ms;
|
||||||
int ret, lun;
|
int ret, lun;
|
||||||
unsigned char data[4096];
|
unsigned char data[4096];
|
||||||
int full_size;
|
int full_size;
|
||||||
int lbpme;
|
|
||||||
struct unmap_list list[1];
|
struct unmap_list list[1];
|
||||||
|
|
||||||
ret = -1;
|
ret = -1;
|
||||||
@@ -62,27 +60,6 @@ int T0300_readonly(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send READCAPACITY16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("READCAPACITY16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall READCAPACITY10 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
lbpme = rc16->lbpme;
|
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
if (!data_loss) {
|
if (!data_loss) {
|
||||||
printf("--dataloss flag is not set. Skipping test\n");
|
printf("--dataloss flag is not set. Skipping test\n");
|
||||||
ret = -2;
|
ret = -2;
|
||||||
|
|||||||
@@ -25,9 +25,8 @@ int T0390_mandatory_opcodes_sbc(const char *initiator, const char *url)
|
|||||||
{
|
{
|
||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_readcapacity16 *rc16;
|
|
||||||
struct scsi_inquiry_standard *inq;
|
struct scsi_inquiry_standard *inq;
|
||||||
int ret = 0, lun, sccs, encserv, lbpme;
|
int ret = 0, lun, sccs, encserv;
|
||||||
unsigned char data[4096];
|
unsigned char data[4096];
|
||||||
int full_size;
|
int full_size;
|
||||||
|
|
||||||
@@ -65,29 +64,6 @@ int T0390_mandatory_opcodes_sbc(const char *initiator, const char *url)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
|
||||||
if (task == NULL) {
|
|
||||||
printf("Failed to send READCAPACITY16 command: %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
|
||||||
printf("READCAPACITY16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
|
||||||
if (rc16 == NULL) {
|
|
||||||
printf("failed to unmarshall READCAPACITY16 data. %s\n", iscsi_get_error(iscsi));
|
|
||||||
ret = -1;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
goto finished;
|
|
||||||
}
|
|
||||||
lbpme = rc16->lbpme;
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
|
|
||||||
/* See how big this inquiry data is */
|
/* See how big this inquiry data is */
|
||||||
task = iscsi_inquiry_sync(iscsi, lun, 0, 0, 64);
|
task = iscsi_inquiry_sync(iscsi, lun, 0, 0, 64);
|
||||||
if (task == NULL || task->status != SCSI_STATUS_GOOD) {
|
if (task == NULL || task->status != SCSI_STATUS_GOOD) {
|
||||||
|
|||||||
+19
-14
@@ -44,6 +44,9 @@ const char *initiatorname2 = "iqn.2007-10.com.github:sahlberg:libiscsi:iscsi-tes
|
|||||||
|
|
||||||
uint32_t block_size;
|
uint32_t block_size;
|
||||||
uint64_t num_blocks;
|
uint64_t num_blocks;
|
||||||
|
int lbpme;
|
||||||
|
int lbppb;
|
||||||
|
int lbpme;
|
||||||
|
|
||||||
int data_loss;
|
int data_loss;
|
||||||
int show_info;
|
int show_info;
|
||||||
@@ -1484,7 +1487,10 @@ int main(int argc, const char *argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the size of the LUN */
|
/* find the size of the LUN
|
||||||
|
All devices support readcapacity10 but only some support
|
||||||
|
readcapacity16
|
||||||
|
*/
|
||||||
task = iscsi_readcapacity10_sync(iscsi, lun, 0, 0);
|
task = iscsi_readcapacity10_sync(iscsi, lun, 0, 0);
|
||||||
if (task == NULL) {
|
if (task == NULL) {
|
||||||
printf("Failed to send READCAPACITY10 command: %s\n", iscsi_get_error(iscsi));
|
printf("Failed to send READCAPACITY10 command: %s\n", iscsi_get_error(iscsi));
|
||||||
@@ -1507,19 +1513,14 @@ int main(int argc, const char *argv[])
|
|||||||
block_size = rc10->block_size;
|
block_size = rc10->block_size;
|
||||||
num_blocks = rc10->lba;
|
num_blocks = rc10->lba;
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
if (num_blocks == 0xffffffff) {
|
|
||||||
task = iscsi_readcapacity16_sync(iscsi, lun);
|
task = iscsi_readcapacity16_sync(iscsi, lun);
|
||||||
if (task == NULL) {
|
if (task == NULL) {
|
||||||
printf("Failed to send READCAPACITY16 command: %s\n", iscsi_get_error(iscsi));
|
printf("Failed to send READCAPACITY16 command: %s\n", iscsi_get_error(iscsi));
|
||||||
iscsi_destroy_context(iscsi);
|
iscsi_destroy_context(iscsi);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
if (task->status == SCSI_STATUS_GOOD) {
|
||||||
printf("READCAPACITY16 command: failed with sense. %s\n", iscsi_get_error(iscsi));
|
|
||||||
scsi_free_scsi_task(task);
|
|
||||||
iscsi_destroy_context(iscsi);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
rc16 = scsi_datain_unmarshall(task);
|
rc16 = scsi_datain_unmarshall(task);
|
||||||
if (rc16 == NULL) {
|
if (rc16 == NULL) {
|
||||||
printf("failed to unmarshall READCAPACITY16 data. %s\n", iscsi_get_error(iscsi));
|
printf("failed to unmarshall READCAPACITY16 data. %s\n", iscsi_get_error(iscsi));
|
||||||
@@ -1529,6 +1530,10 @@ int main(int argc, const char *argv[])
|
|||||||
}
|
}
|
||||||
block_size = rc16->block_length;
|
block_size = rc16->block_length;
|
||||||
num_blocks = rc16->returned_lba;
|
num_blocks = rc16->returned_lba;
|
||||||
|
lbpme = rc16->lbpme;
|
||||||
|
lbppb = 1 << rc16->lbppbe;
|
||||||
|
lbpme = rc16->lbpme;
|
||||||
|
|
||||||
scsi_free_scsi_task(task);
|
scsi_free_scsi_task(task);
|
||||||
}
|
}
|
||||||
iscsi_destroy_context(iscsi);
|
iscsi_destroy_context(iscsi);
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ extern const char *initiatorname2;
|
|||||||
|
|
||||||
extern uint32_t block_size;
|
extern uint32_t block_size;
|
||||||
extern uint64_t num_blocks;
|
extern uint64_t num_blocks;
|
||||||
|
extern int lbpme;
|
||||||
|
extern int lbppb;
|
||||||
|
extern int lbpme;
|
||||||
extern int data_loss;
|
extern int data_loss;
|
||||||
extern int show_info;
|
extern int show_info;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user