MEMORY add wrappers around all mallocs and frees and trace them
This patch adds a wrapper around all memory allocations and frees. The idea is to get warned immediately if the application leaks memory. Additionally the wrapper functions make it easy to add different memory allocators or memory pools in the future.
This commit is contained in:
+87
-114
@@ -46,24 +46,32 @@ scsi_free_scsi_task(struct scsi_task *task)
|
||||
struct scsi_allocated_memory *mem;
|
||||
|
||||
while ((mem = task->mem)) {
|
||||
SLIST_REMOVE(&task->mem, mem);
|
||||
free(mem);
|
||||
SLIST_REMOVE(&task->mem, mem);
|
||||
iscsi_free(task->iscsi, mem);
|
||||
}
|
||||
|
||||
free(task->datain.data);
|
||||
free(task);
|
||||
iscsi_free(task->iscsi,task->datain.data);
|
||||
iscsi_free(task->iscsi,task);
|
||||
}
|
||||
|
||||
struct scsi_task *
|
||||
scsi_create_scsi_task(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct scsi_task * task;
|
||||
task = iscsi_zmalloc(iscsi, sizeof(struct scsi_task));
|
||||
if (task==NULL) return NULL;
|
||||
task->iscsi=iscsi;
|
||||
return task;
|
||||
}
|
||||
|
||||
void *
|
||||
scsi_malloc(struct scsi_task *task, size_t size)
|
||||
{
|
||||
struct scsi_allocated_memory *mem;
|
||||
|
||||
mem = malloc(sizeof(struct scsi_allocated_memory) + size);
|
||||
mem = iscsi_zmalloc(task->iscsi,sizeof(struct scsi_allocated_memory) + size);
|
||||
if (mem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
memset(mem, 0, sizeof(struct scsi_allocated_memory) + size);
|
||||
mem->ptr = (void *) ((uintptr_t)mem + sizeof(struct scsi_allocated_memory));
|
||||
SLIST_ADD(&task->mem, mem);
|
||||
return mem->ptr;
|
||||
@@ -163,16 +171,15 @@ scsi_sense_ascq_str(int ascq)
|
||||
* TESTUNITREADY
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_testunitready(void)
|
||||
scsi_cdb_testunitready(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_TESTUNITREADY;
|
||||
|
||||
task->cdb_size = 6;
|
||||
@@ -187,16 +194,15 @@ scsi_cdb_testunitready(void)
|
||||
* REPORTLUNS
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_reportluns_cdb(int report_type, int alloc_len)
|
||||
scsi_reportluns_cdb(struct iscsi_context *iscsi, int report_type, int alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_REPORTLUNS;
|
||||
task->cdb[2] = report_type;
|
||||
*(uint32_t *)&task->cdb[6] = htonl(alloc_len);
|
||||
@@ -268,16 +274,15 @@ scsi_reportluns_datain_unmarshall(struct scsi_task *task)
|
||||
* READCAPACITY10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_readcapacity10(int lba, int pmi)
|
||||
scsi_cdb_readcapacity10(struct iscsi_context *iscsi, int lba, int pmi)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READCAPACITY10;
|
||||
|
||||
*(uint32_t *)&task->cdb[2] = htonl(lba);
|
||||
@@ -302,7 +307,7 @@ scsi_cdb_readcapacity10(int lba, int pmi)
|
||||
* READTOC
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len)
|
||||
scsi_cdb_readtoc(struct iscsi_context *iscsi, int msf, int format, int track_session, uint16_t alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
@@ -312,12 +317,11 @@ scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READTOC;
|
||||
|
||||
if (msf) {
|
||||
@@ -456,16 +460,15 @@ scsi_readtoc_datain_unmarshall(struct scsi_task *task)
|
||||
* RESERVE6
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_reserve6(void)
|
||||
scsi_cdb_reserve6(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_RESERVE6;
|
||||
|
||||
task->cdb_size = 6;
|
||||
@@ -477,16 +480,15 @@ scsi_cdb_reserve6(void)
|
||||
* RELEASE10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_release6(void)
|
||||
scsi_cdb_release6(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_RELEASE6;
|
||||
|
||||
task->cdb_size = 6;
|
||||
@@ -637,16 +639,15 @@ scsi_maintenancein_datain_unmarshall(struct scsi_task *task)
|
||||
* MAINTENANCE In / Read Supported Op Codes
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_report_supported_opcodes(int return_timeouts, uint32_t alloc_len)
|
||||
scsi_cdb_report_supported_opcodes(struct iscsi_context *iscsi, int return_timeouts, uint32_t alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_MAINTENANCE_IN;
|
||||
task->cdb[1] = SCSI_REPORT_SUPPORTED_OP_CODES;
|
||||
task->cdb[2] = SCSI_REPORT_SUPPORTING_OPS_ALL;
|
||||
@@ -711,16 +712,15 @@ scsi_readcapacity10_datain_unmarshall(struct scsi_task *task)
|
||||
* INQUIRY
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_inquiry(int evpd, int page_code, int alloc_len)
|
||||
scsi_cdb_inquiry(struct iscsi_context *iscsi, int evpd, int page_code, int alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_INQUIRY;
|
||||
|
||||
if (evpd) {
|
||||
@@ -987,7 +987,7 @@ scsi_inquiry_datain_unmarshall(struct scsi_task *task)
|
||||
* READ6
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_read6(uint32_t lba, uint32_t xferlen, int blocksize)
|
||||
scsi_cdb_read6(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
int num_blocks;
|
||||
@@ -1001,12 +1001,11 @@ scsi_cdb_read6(uint32_t lba, uint32_t xferlen, int blocksize)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ6;
|
||||
task->cdb_size = 6;
|
||||
|
||||
@@ -1035,16 +1034,15 @@ scsi_cdb_read6(uint32_t lba, uint32_t xferlen, int blocksize)
|
||||
* READ10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_read10(uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_read10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ10;
|
||||
|
||||
task->cdb[1] |= ((rdprotect & 0x07) << 5);
|
||||
@@ -1081,16 +1079,15 @@ scsi_cdb_read10(uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, in
|
||||
* READ12
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_read12(uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_read12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ12;
|
||||
|
||||
task->cdb[1] |= ((rdprotect & 0x07) << 5);
|
||||
@@ -1127,16 +1124,15 @@ scsi_cdb_read12(uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, in
|
||||
* READ16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_read16(uint64_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_read16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ16;
|
||||
|
||||
task->cdb[1] |= ((rdprotect & 0x07) << 5);
|
||||
@@ -1174,16 +1170,15 @@ scsi_cdb_read16(uint64_t lba, uint32_t xferlen, int blocksize, int rdprotect, in
|
||||
* WRITE10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_write10(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_write10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE10;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1220,16 +1215,15 @@ scsi_cdb_write10(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, i
|
||||
* WRITE12
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_write12(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_write12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE12;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1266,16 +1260,15 @@ scsi_cdb_write12(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, i
|
||||
* WRITE16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_write16(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_write16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE16;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1313,16 +1306,15 @@ scsi_cdb_write16(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, i
|
||||
* ORWRITE
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_orwrite(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_orwrite(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_ORWRITE;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1360,16 +1352,15 @@ scsi_cdb_orwrite(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, i
|
||||
* COMPAREANDWRITE
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_compareandwrite(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
scsi_cdb_compareandwrite(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int fua, int fua_nv, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_COMPARE_AND_WRITE;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1406,16 +1397,15 @@ scsi_cdb_compareandwrite(uint64_t lba, uint32_t xferlen, int blocksize, int wrpr
|
||||
* VERIFY10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_verify10(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
scsi_cdb_verify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_VERIFY10;
|
||||
|
||||
if (vprotect) {
|
||||
@@ -1452,16 +1442,15 @@ scsi_cdb_verify10(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int byt
|
||||
* VERIFY12
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_verify12(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
scsi_cdb_verify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_VERIFY12;
|
||||
|
||||
if (vprotect) {
|
||||
@@ -1498,16 +1487,15 @@ scsi_cdb_verify12(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int byt
|
||||
* VERIFY16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_verify16(uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
scsi_cdb_verify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_VERIFY16;
|
||||
|
||||
if (vprotect) {
|
||||
@@ -1545,16 +1533,15 @@ scsi_cdb_verify16(uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int byt
|
||||
* UNMAP
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_unmap(int anchor, int group, uint16_t xferlen)
|
||||
scsi_cdb_unmap(struct iscsi_context *iscsi, int anchor, int group, uint16_t xferlen)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_UNMAP;
|
||||
|
||||
if (anchor) {
|
||||
@@ -1579,16 +1566,15 @@ scsi_cdb_unmap(int anchor, int group, uint16_t xferlen)
|
||||
* WRITE_SAME10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writesame10(int wrprotect, int anchor, int unmap, int pbdata, int lbdata, uint32_t lba, int group, uint16_t num_blocks)
|
||||
scsi_cdb_writesame10(struct iscsi_context *iscsi, int wrprotect, int anchor, int unmap, int pbdata, int lbdata, uint32_t lba, int group, uint16_t num_blocks)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_SAME10;
|
||||
|
||||
if (wrprotect) {
|
||||
@@ -1623,16 +1609,15 @@ scsi_cdb_writesame10(int wrprotect, int anchor, int unmap, int pbdata, int lbdat
|
||||
* WRITE_SAME16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writesame16(int wrprotect, int anchor, int unmap, int pbdata, int lbdata, uint64_t lba, int group, uint32_t num_blocks)
|
||||
scsi_cdb_writesame16(struct iscsi_context *iscsi, int wrprotect, int anchor, int unmap, int pbdata, int lbdata, uint64_t lba, int group, uint32_t num_blocks)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_SAME16;
|
||||
|
||||
if (wrprotect) {
|
||||
@@ -1668,18 +1653,17 @@ scsi_cdb_writesame16(int wrprotect, int anchor, int unmap, int pbdata, int lbdat
|
||||
* MODESENSE6
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_modesense6(int dbd, enum scsi_modesense_page_control pc,
|
||||
scsi_cdb_modesense6(struct iscsi_context *iscsi, int dbd, enum scsi_modesense_page_control pc,
|
||||
enum scsi_modesense_page_code page_code,
|
||||
int sub_page_code, unsigned char alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_MODESENSE6;
|
||||
|
||||
if (dbd) {
|
||||
@@ -1859,16 +1843,15 @@ scsi_modesense_datain_unmarshall(struct scsi_task *task)
|
||||
* STARTSTOPUNIT
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_startstopunit(int immed, int pcm, int pc, int no_flush, int loej, int start)
|
||||
scsi_cdb_startstopunit(struct iscsi_context *iscsi, int immed, int pcm, int pc, int no_flush, int loej, int start)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_STARTSTOPUNIT;
|
||||
|
||||
if (immed) {
|
||||
@@ -1905,16 +1888,15 @@ scsi_cdb_startstopunit(int immed, int pcm, int pc, int no_flush, int loej, int s
|
||||
* PREVENTALLOWMEDIUMREMOVAL
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_preventallow(int prevent)
|
||||
scsi_cdb_preventallow(struct iscsi_context *iscsi, int prevent)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_PREVENTALLOW;
|
||||
|
||||
task->cdb[4] = prevent & 0x03;
|
||||
@@ -1932,16 +1914,15 @@ scsi_cdb_preventallow(int prevent)
|
||||
* SYNCHRONIZECACHE10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_synchronizecache10(int lba, int num_blocks, int syncnv, int immed)
|
||||
scsi_cdb_synchronizecache10(struct iscsi_context *iscsi, int lba, int num_blocks, int syncnv, int immed)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SYNCHRONIZECACHE10;
|
||||
|
||||
if (syncnv) {
|
||||
@@ -1964,16 +1945,15 @@ scsi_cdb_synchronizecache10(int lba, int num_blocks, int syncnv, int immed)
|
||||
* SYNCHRONIZECACHE16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_synchronizecache16(uint64_t lba, uint32_t num_blocks, int syncnv, int immed)
|
||||
scsi_cdb_synchronizecache16(struct iscsi_context *iscsi, uint64_t lba, uint32_t num_blocks, int syncnv, int immed)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SYNCHRONIZECACHE16;
|
||||
|
||||
if (syncnv) {
|
||||
@@ -1997,16 +1977,15 @@ scsi_cdb_synchronizecache16(uint64_t lba, uint32_t num_blocks, int syncnv, int i
|
||||
* PREFETCH10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_prefetch10(uint32_t lba, int num_blocks, int immed, int group)
|
||||
scsi_cdb_prefetch10(struct iscsi_context *iscsi, uint32_t lba, int num_blocks, int immed, int group)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_PREFETCH10;
|
||||
|
||||
if (immed) {
|
||||
@@ -2027,16 +2006,15 @@ scsi_cdb_prefetch10(uint32_t lba, int num_blocks, int immed, int group)
|
||||
* PREFETCH16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_prefetch16(uint64_t lba, int num_blocks, int immed, int group)
|
||||
scsi_cdb_prefetch16(struct iscsi_context *iscsi, uint64_t lba, int num_blocks, int immed, int group)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_PREFETCH16;
|
||||
|
||||
if (immed) {
|
||||
@@ -2059,16 +2037,15 @@ scsi_cdb_prefetch16(uint64_t lba, int num_blocks, int immed, int group)
|
||||
* SERVICEACTIONIN16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_serviceactionin16(enum scsi_service_action_in sa, uint32_t xferlen)
|
||||
scsi_cdb_serviceactionin16(struct iscsi_context *iscsi, enum scsi_service_action_in sa, uint32_t xferlen)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SERVICE_ACTION_IN;
|
||||
|
||||
task->cdb[1] = sa;
|
||||
@@ -2092,25 +2069,24 @@ scsi_cdb_serviceactionin16(enum scsi_service_action_in sa, uint32_t xferlen)
|
||||
* READCAPACITY16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_readcapacity16(void)
|
||||
scsi_cdb_readcapacity16(struct iscsi_context *iscsi)
|
||||
{
|
||||
return scsi_cdb_serviceactionin16(SCSI_READCAPACITY16, 32);
|
||||
return scsi_cdb_serviceactionin16(iscsi, SCSI_READCAPACITY16, 32);
|
||||
}
|
||||
|
||||
/*
|
||||
* GET_LBA_STATUS
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_get_lba_status(uint64_t starting_lba, uint32_t alloc_len)
|
||||
scsi_cdb_get_lba_status(struct iscsi_context *iscsi, uint64_t starting_lba, uint32_t alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SERVICE_ACTION_IN;
|
||||
|
||||
task->cdb[1] = SCSI_GET_LBA_STATUS;
|
||||
@@ -2136,16 +2112,15 @@ scsi_cdb_get_lba_status(uint64_t starting_lba, uint32_t alloc_len)
|
||||
* WRITEVERIFY10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writeverify10(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
scsi_cdb_writeverify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_VERIFY10;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -2179,16 +2154,15 @@ scsi_cdb_writeverify10(uint32_t lba, uint32_t xferlen, int blocksize, int wrprot
|
||||
* WRITEVERIFY12
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writeverify12(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
scsi_cdb_writeverify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_VERIFY12;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -2222,16 +2196,15 @@ scsi_cdb_writeverify12(uint32_t lba, uint32_t xferlen, int blocksize, int wrprot
|
||||
* WRITEVERIFY16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writeverify16(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
scsi_cdb_writeverify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_VERIFY16;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
|
||||
Reference in New Issue
Block a user