diff --git a/include/spdk/scsi.h b/include/spdk/scsi.h index 5bf155e04..a6b0cf634 100644 --- a/include/spdk/scsi.h +++ b/include/spdk/scsi.h @@ -255,8 +255,8 @@ void spdk_scsi_task_construct(struct spdk_scsi_task *task, uint32_t *owner_task_ void spdk_scsi_task_put(struct spdk_scsi_task *task); void spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len, uint8_t **data); -int spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, - int ascq); +void spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, + int ascq); void spdk_scsi_task_set_check_condition(struct spdk_scsi_task *task, int sk, int asc, int ascq); diff --git a/lib/scsi/scsi_bdev.c b/lib/scsi/scsi_bdev.c index 4533f844d..2b79ab0b7 100644 --- a/lib/scsi/scsi_bdev.c +++ b/lib/scsi/scsi_bdev.c @@ -1801,10 +1801,10 @@ spdk_bdev_scsi_process_primary(struct spdk_bdev *bdev, asc = 0x00; ascq = 0x00; - data_len = spdk_scsi_task_build_sense_data(task, sk, asc, ascq); + spdk_scsi_task_build_sense_data(task, sk, asc, ascq); /* omit SenseLength */ - data_len -= 2; + data_len = task->sense_data_len - 2; memcpy(data, &task->sense_data[2], data_len); task->data_transferred = (uint64_t)data_len; task->status = SPDK_SCSI_STATUS_GOOD; diff --git a/lib/scsi/task.c b/lib/scsi/task.c index 77309c97c..0c8426a29 100644 --- a/lib/scsi/task.c +++ b/lib/scsi/task.c @@ -131,24 +131,21 @@ spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len, memset(task->rbuf, 0, task->alloc_len); } -int +void spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq) { uint8_t *data; uint8_t *cp; int resp_code; - int hlen = 0, len, plen; - int total; data = task->sense_data; resp_code = 0x70; /* Current + Fixed format */ /* SenseLength */ memset(data, 0, 2); - hlen = 2; /* Sense Data */ - cp = &data[hlen]; + cp = &data[2]; /* VALID(7) RESPONSE CODE(6-0) */ cp[0] = 0x80 | resp_code; @@ -158,9 +155,9 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in cp[2] = sk & 0xf; /* INFORMATION */ memset(&cp[3], 0, 4); + /* ADDITIONAL SENSE LENGTH */ - cp[7] = 0; - len = 8; + cp[7] = 10; /* COMMAND-SPECIFIC INFORMATION */ memset(&cp[8], 0, 4); @@ -175,19 +172,10 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in cp[15] = 0; cp[16] = 0; cp[17] = 0; - /* Additional sense bytes */ - plen = 18 - len; - - /* ADDITIONAL SENSE LENGTH */ - cp[7] = plen; - - total = hlen + len + plen; /* SenseLength */ - to_be16(data, total - 2); - task->sense_data_len = total; - - return total; + to_be16(data, 18); + task->sense_data_len = 20; } void diff --git a/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c b/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c index 3a9c084b3..23bb7e665 100644 --- a/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c +++ b/test/lib/scsi/scsi_bdev/scsi_bdev_ut.c @@ -72,24 +72,21 @@ spdk_scsi_task_alloc_data(struct spdk_scsi_task *task, uint32_t alloc_len, *data = task->rbuf; } -int +void spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, int ascq) { uint8_t *data; uint8_t *cp; int resp_code; - int hlen = 0, len, plen; - int total; data = task->sense_data; resp_code = 0x70; /* Current + Fixed format */ /* SenseLength */ memset(data, 0, 2); - hlen = 2; /* Sense Data */ - cp = &data[hlen]; + cp = &data[2]; /* VALID(7) RESPONSE CODE(6-0) */ cp[0] = 0x80 | resp_code; @@ -99,9 +96,9 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in cp[2] = sk & 0xf; /* INFORMATION */ memset(&cp[3], 0, 4); + /* ADDITIONAL SENSE LENGTH */ - cp[7] = 0; - len = 8; + cp[7] = 10; /* COMMAND-SPECIFIC INFORMATION */ memset(&cp[8], 0, 4); @@ -116,19 +113,10 @@ spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int asc, in cp[15] = 0; cp[16] = 0; cp[17] = 0; - /* Additional sense bytes */ - plen = 18 - len; - - /* ADDITIONAL SENSE LENGTH */ - cp[7] = plen; - - total = hlen + len + plen; /* SenseLength */ - to_be16(data, total - 2); - task->sense_data_len = total; - - return total; + to_be16(data, 18); + task->sense_data_len = 20; } struct spdk_bdev_io *