SCSI-LOWLEVEL revert changes to scsi-lowlevel
The memory tracking code reports memory allocated by iscsi_allocate_pdu_with_itt_flags_size() as lost. This memory is allocated by the iscsi part of libiscsi, but later freed by the lowlevel scsi part. We will fix this later by introducing an iscsi_task object.
This commit is contained in:
@@ -955,8 +955,8 @@ EXTERN int scsi_task_add_data_in_buffer(struct scsi_task *task, int len, unsigne
|
||||
* To cancel the task also a the target you need to call the task management functions.
|
||||
*/
|
||||
EXTERN int
|
||||
iscsi_scsi_task_cancel(struct iscsi_context *iscsi,
|
||||
struct scsi_task *task);
|
||||
iscsi_scsi_cancel_task(struct iscsi_context *iscsi,
|
||||
struct scsi_task *task);
|
||||
|
||||
/*
|
||||
* This function is used when you want to cancel all scsi tasks.
|
||||
|
||||
@@ -17,6 +17,12 @@
|
||||
#ifndef __scsi_lowlevel_h__
|
||||
#define __scsi_lowlevel_h__
|
||||
|
||||
#if defined(WIN32)
|
||||
#define EXTERN __declspec( dllexport )
|
||||
#else
|
||||
#define EXTERN
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -123,7 +129,7 @@ enum scsi_xfer_dir {
|
||||
/*
|
||||
* READTOC
|
||||
*/
|
||||
EXTERN struct scsi_task *scsi_cdb_readtoc(struct iscsi_context *iscsi, int msf, int format, int track_session, uint16_t alloc_len);
|
||||
EXTERN struct scsi_task *scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len);
|
||||
|
||||
enum scsi_readtoc_fmt {
|
||||
SCSI_READ_TOC = 0,
|
||||
@@ -299,11 +305,6 @@ struct scsi_data {
|
||||
unsigned char *data;
|
||||
};
|
||||
|
||||
struct scsi_allocated_memory {
|
||||
struct scsi_allocated_memory *next;
|
||||
void *ptr;
|
||||
};
|
||||
|
||||
enum scsi_residual {
|
||||
SCSI_RESIDUAL_NO_RESIDUAL = 0,
|
||||
SCSI_RESIDUAL_UNDERFLOW,
|
||||
@@ -312,10 +313,10 @@ enum scsi_residual {
|
||||
|
||||
struct scsi_task {
|
||||
int status;
|
||||
|
||||
int cdb_size;
|
||||
int xfer_dir;
|
||||
int expxferlen;
|
||||
struct iscsi_context * iscsi;
|
||||
unsigned char cdb[SCSI_CDB_MAX_SIZE];
|
||||
union {
|
||||
struct scsi_read6_params read6;
|
||||
@@ -361,7 +362,7 @@ struct scsi_task {
|
||||
|
||||
/* This function will free a scsi task structure.
|
||||
You may NOT cancel a task until the callback has been invoked
|
||||
and the command has completed on the iscsi layer.
|
||||
and the command has completed on the transport layer.
|
||||
*/
|
||||
EXTERN void scsi_free_scsi_task(struct scsi_task *task);
|
||||
|
||||
@@ -371,7 +372,8 @@ EXTERN void *scsi_get_task_private_ptr(struct scsi_task *task);
|
||||
/*
|
||||
* TESTUNITREADY
|
||||
*/
|
||||
EXTERN struct scsi_task *scsi_cdb_testunitready(struct iscsi_context *iscsi);
|
||||
EXTERN struct scsi_task *scsi_cdb_testunitready(void);
|
||||
|
||||
|
||||
/*
|
||||
* REPORTLUNS
|
||||
@@ -385,16 +387,16 @@ struct scsi_reportluns_list {
|
||||
uint16_t luns[0];
|
||||
};
|
||||
|
||||
EXTERN struct scsi_task *scsi_reportluns_cdb(struct iscsi_context *iscsi, int report_type, int alloc_len);
|
||||
EXTERN struct scsi_task *scsi_reportluns_cdb(int report_type, int alloc_len);
|
||||
|
||||
/*
|
||||
* RESERVE6
|
||||
*/
|
||||
EXTERN struct scsi_task *scsi_cdb_reserve6(struct iscsi_context *iscsi);
|
||||
EXTERN struct scsi_task *scsi_cdb_reserve6(void);
|
||||
/*
|
||||
* RELEASE6
|
||||
*/
|
||||
EXTERN struct scsi_task *scsi_cdb_release6(struct iscsi_context *iscsi);
|
||||
EXTERN struct scsi_task *scsi_cdb_release6(void);
|
||||
|
||||
/*
|
||||
* READCAPACITY10
|
||||
@@ -403,7 +405,7 @@ struct scsi_readcapacity10 {
|
||||
uint32_t lba;
|
||||
uint32_t block_size;
|
||||
};
|
||||
EXTERN struct scsi_task *scsi_cdb_readcapacity10(struct iscsi_context *iscsi, int lba, int pmi);
|
||||
EXTERN struct scsi_task *scsi_cdb_readcapacity10(int lba, int pmi);
|
||||
|
||||
|
||||
/*
|
||||
@@ -563,7 +565,7 @@ struct scsi_inquiry_logical_block_provisioning {
|
||||
enum scsi_inquiry_provisioning_type provisioning_type;
|
||||
};
|
||||
|
||||
EXTERN struct scsi_task *scsi_cdb_inquiry(struct iscsi_context *iscsi, int evpd, int page_code, int alloc_len);
|
||||
EXTERN struct scsi_task *scsi_cdb_inquiry(int evpd, int page_code, int alloc_len);
|
||||
|
||||
struct scsi_inquiry_unit_serial_number {
|
||||
enum scsi_inquiry_peripheral_qualifier qualifier;
|
||||
@@ -733,8 +735,7 @@ struct scsi_mode_sense {
|
||||
struct scsi_mode_page *pages;
|
||||
};
|
||||
|
||||
EXTERN struct scsi_task *scsi_cdb_modesense6(struct iscsi_context *iscsi,
|
||||
int dbd,
|
||||
EXTERN struct scsi_task *scsi_cdb_modesense6(int dbd,
|
||||
enum scsi_modesense_page_control pc,
|
||||
enum scsi_modesense_page_code page_code,
|
||||
int sub_page_code,
|
||||
@@ -799,37 +800,37 @@ struct scsi_report_supported_op_codes {
|
||||
EXTERN int scsi_datain_getfullsize(struct scsi_task *task);
|
||||
EXTERN void *scsi_datain_unmarshall(struct scsi_task *task);
|
||||
|
||||
EXTERN struct scsi_task *scsi_cdb_read6(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *scsi_cdb_startstopunit(struct iscsi_context *iscsi, int immed, int pcm, int pc, int no_flush, int loej, int start);
|
||||
EXTERN struct scsi_task *scsi_cdb_preventallow(struct iscsi_context *iscsi, int prevent);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *scsi_cdb_writeverify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number);
|
||||
EXTERN struct scsi_task *scsi_cdb_writeverify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number);
|
||||
EXTERN struct scsi_task *scsi_cdb_writeverify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number);
|
||||
EXTERN struct scsi_task *scsi_cdb_verify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize);
|
||||
EXTERN struct scsi_task *scsi_cdb_verify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize);
|
||||
EXTERN struct scsi_task *scsi_cdb_verify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize);
|
||||
EXTERN struct scsi_task *scsi_cdb_read6(uint32_t lba, uint32_t xferlen, int blocksize);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN struct scsi_task *scsi_cdb_startstopunit(int immed, int pcm, int pc, int no_flush, int loej, int start);
|
||||
EXTERN struct scsi_task *scsi_cdb_preventallow(int prevent);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN struct scsi_task *scsi_cdb_writeverify10(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number);
|
||||
EXTERN struct scsi_task *scsi_cdb_writeverify12(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number);
|
||||
EXTERN struct scsi_task *scsi_cdb_writeverify16(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number);
|
||||
EXTERN struct scsi_task *scsi_cdb_verify10(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize);
|
||||
EXTERN struct scsi_task *scsi_cdb_verify12(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize);
|
||||
EXTERN struct scsi_task *scsi_cdb_verify16(uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize);
|
||||
|
||||
EXTERN struct scsi_task *scsi_cdb_synchronizecache10(struct iscsi_context *iscsi, int lba, int num_blocks,
|
||||
EXTERN struct scsi_task *scsi_cdb_synchronizecache10(int lba, int num_blocks,
|
||||
int syncnv, int immed);
|
||||
EXTERN struct scsi_task *scsi_cdb_synchronizecache16(struct iscsi_context *iscsi, uint64_t lba, uint32_t num_blocks,
|
||||
EXTERN struct scsi_task *scsi_cdb_synchronizecache16(uint64_t lba, uint32_t num_blocks,
|
||||
int syncnv, int immed);
|
||||
EXTERN struct scsi_task *scsi_cdb_serviceactionin16(struct iscsi_context *iscsi, enum scsi_service_action_in sa, uint32_t xferlen);
|
||||
EXTERN struct scsi_task *scsi_cdb_readcapacity16(struct iscsi_context *iscsi);
|
||||
EXTERN struct scsi_task *scsi_cdb_get_lba_status(struct iscsi_context *iscsi, uint64_t starting_lba, uint32_t alloc_len);
|
||||
EXTERN struct scsi_task *scsi_cdb_unmap(struct iscsi_context *iscsi, int anchor, int group, uint16_t xferlen);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *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);
|
||||
EXTERN struct scsi_task *scsi_cdb_prefetch10(struct iscsi_context *iscsi, uint32_t lba, int num_blocks, int immed, int group);
|
||||
EXTERN struct scsi_task *scsi_cdb_prefetch16(struct iscsi_context *iscsi, uint64_t lba, int num_blocks, int immed, int group);
|
||||
EXTERN struct scsi_task *scsi_cdb_report_supported_opcodes(struct iscsi_context *iscsi, int report_timeouts, uint32_t alloc_len);
|
||||
EXTERN struct scsi_task *scsi_cdb_serviceactionin16(enum scsi_service_action_in sa, uint32_t xferlen);
|
||||
EXTERN struct scsi_task *scsi_cdb_readcapacity16(void);
|
||||
EXTERN struct scsi_task *scsi_cdb_get_lba_status(uint64_t starting_lba, uint32_t alloc_len);
|
||||
EXTERN struct scsi_task *scsi_cdb_unmap(int anchor, int group, uint16_t xferlen);
|
||||
EXTERN 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);
|
||||
EXTERN 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);
|
||||
EXTERN struct scsi_task *scsi_cdb_prefetch10(uint32_t lba, int num_blocks, int immed, int group);
|
||||
EXTERN struct scsi_task *scsi_cdb_prefetch16(uint64_t lba, int num_blocks, int immed, int group);
|
||||
EXTERN struct scsi_task *scsi_cdb_report_supported_opcodes(int report_timeouts, uint32_t alloc_len);
|
||||
|
||||
void *scsi_malloc(struct scsi_task *task, size_t size);
|
||||
|
||||
@@ -838,4 +839,3 @@ void *scsi_malloc(struct scsi_task *task, size_t size);
|
||||
#endif
|
||||
|
||||
#endif /* __scsi_lowlevel_h__ */
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ iscsi_reportluns_task
|
||||
iscsi_scsi_cancel_all_tasks
|
||||
iscsi_scsi_command_async
|
||||
iscsi_scsi_command_sync
|
||||
iscsi_scsi_task_cancel
|
||||
iscsi_scsi_cancel_task
|
||||
iscsi_service
|
||||
iscsi_set_alias
|
||||
iscsi_set_debug
|
||||
|
||||
@@ -59,7 +59,7 @@ iscsi_reportluns_task
|
||||
iscsi_scsi_cancel_all_tasks
|
||||
iscsi_scsi_command_async
|
||||
iscsi_scsi_command_sync
|
||||
iscsi_scsi_task_cancel
|
||||
iscsi_scsi_cancel_task
|
||||
iscsi_service
|
||||
iscsi_set_alias
|
||||
iscsi_set_debug
|
||||
|
||||
@@ -85,11 +85,10 @@ iscsi_send_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *cmd_pdu,
|
||||
len = iscsi->target_max_recv_data_segment_length;
|
||||
}
|
||||
|
||||
pdu = iscsi_allocate_pdu_with_itt_flags_size(iscsi, ISCSI_PDU_DATA_OUT,
|
||||
pdu = iscsi_allocate_pdu_with_itt_flags(iscsi, ISCSI_PDU_DATA_OUT,
|
||||
ISCSI_PDU_NO_PDU,
|
||||
cmd_pdu->itt,
|
||||
ISCSI_PDU_DELETE_WHEN_SENT|ISCSI_PDU_NO_CALLBACK,
|
||||
len);
|
||||
ISCSI_PDU_DELETE_WHEN_SENT|ISCSI_PDU_NO_CALLBACK);
|
||||
if (pdu == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory, Failed to allocate "
|
||||
"scsi data out pdu.");
|
||||
@@ -193,22 +192,15 @@ iscsi_scsi_command_async(struct iscsi_context *iscsi, int lun,
|
||||
"scsi cbdata.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
scsi_cbdata->task = task;
|
||||
scsi_cbdata->callback = cb;
|
||||
scsi_cbdata->private_data = private_data;
|
||||
|
||||
scsi_set_task_private_ptr(task, scsi_cbdata);
|
||||
|
||||
u_int32_t payload_size = 0;
|
||||
if (iscsi->use_immediate_data == ISCSI_IMMEDIATE_DATA_YES) {
|
||||
payload_size=data.size;
|
||||
if (payload_size > iscsi->first_burst_length) {
|
||||
payload_size = iscsi->first_burst_length;
|
||||
}
|
||||
}
|
||||
|
||||
pdu = iscsi_allocate_pdu_size(iscsi, ISCSI_PDU_SCSI_REQUEST,
|
||||
ISCSI_PDU_SCSI_RESPONSE, payload_size);
|
||||
pdu = iscsi_allocate_pdu(iscsi, ISCSI_PDU_SCSI_REQUEST,
|
||||
ISCSI_PDU_SCSI_RESPONSE);
|
||||
if (pdu == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory, Failed to allocate "
|
||||
"scsi pdu.");
|
||||
@@ -392,7 +384,7 @@ iscsi_process_scsi_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu,
|
||||
break;
|
||||
case SCSI_STATUS_CHECK_CONDITION:
|
||||
task->datain.size = in->data_pos;
|
||||
task->datain.data = iscsi_malloc(iscsi, task->datain.size);
|
||||
task->datain.data = malloc(task->datain.size);
|
||||
if (task->datain.data == NULL) {
|
||||
iscsi_set_error(iscsi, "failed to allocate blob for "
|
||||
"sense data");
|
||||
@@ -541,7 +533,7 @@ iscsi_testunitready_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_testunitready(iscsi);
|
||||
task = scsi_cdb_testunitready();
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"testunitready cdb.");
|
||||
@@ -569,7 +561,7 @@ iscsi_reportluns_task(struct iscsi_context *iscsi, int report_type,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_reportluns_cdb(iscsi, report_type, alloc_len);
|
||||
task = scsi_reportluns_cdb(report_type, alloc_len);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"reportluns cdb.");
|
||||
@@ -592,7 +584,7 @@ iscsi_inquiry_task(struct iscsi_context *iscsi, int lun, int evpd,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_inquiry(iscsi, evpd, page_code, maxsize);
|
||||
task = scsi_cdb_inquiry(evpd, page_code, maxsize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"inquiry cdb.");
|
||||
@@ -613,7 +605,7 @@ iscsi_readcapacity10_task(struct iscsi_context *iscsi, int lun, int lba,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_readcapacity10(iscsi, lba, pmi);
|
||||
task = scsi_cdb_readcapacity10(lba, pmi);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"readcapacity10 cdb.");
|
||||
@@ -634,7 +626,7 @@ iscsi_readcapacity16_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_readcapacity16(iscsi);
|
||||
task = scsi_cdb_readcapacity16();
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"readcapacity16 cdb.");
|
||||
@@ -656,7 +648,7 @@ iscsi_get_lba_status_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_get_lba_status(iscsi, starting_lba, alloc_len);
|
||||
task = scsi_cdb_get_lba_status(starting_lba, alloc_len);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"get-lba-status cdb.");
|
||||
@@ -684,7 +676,7 @@ iscsi_read6_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_read6(iscsi, lba, datalen, blocksize);
|
||||
task = scsi_cdb_read6(lba, datalen, blocksize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"read6 cdb.");
|
||||
@@ -713,7 +705,7 @@ iscsi_read10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_read10(iscsi, lba, datalen, blocksize, rdprotect,
|
||||
task = scsi_cdb_read10(lba, datalen, blocksize, rdprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -743,7 +735,7 @@ iscsi_read12_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_read12(iscsi, lba, datalen, blocksize, rdprotect,
|
||||
task = scsi_cdb_read12(lba, datalen, blocksize, rdprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -773,7 +765,7 @@ iscsi_read16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_read16(iscsi, lba, datalen, blocksize, rdprotect,
|
||||
task = scsi_cdb_read16(lba, datalen, blocksize, rdprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -804,7 +796,7 @@ iscsi_write10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_write10(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_write10(lba, datalen, blocksize, wrprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -839,7 +831,7 @@ iscsi_write12_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_write12(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_write12(lba, datalen, blocksize, wrprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -874,7 +866,7 @@ iscsi_write16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_write16(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_write16(lba, datalen, blocksize, wrprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -909,7 +901,7 @@ iscsi_orwrite_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_orwrite(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_orwrite(lba, datalen, blocksize, wrprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -944,7 +936,7 @@ iscsi_compareandwrite_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_compareandwrite(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_compareandwrite(lba, datalen, blocksize, wrprotect,
|
||||
dpo, fua, fua_nv, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -979,7 +971,7 @@ iscsi_writeverify10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_writeverify10(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_writeverify10(lba, datalen, blocksize, wrprotect,
|
||||
dpo, bytchk, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1014,7 +1006,7 @@ iscsi_writeverify12_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_writeverify12(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_writeverify12(lba, datalen, blocksize, wrprotect,
|
||||
dpo, bytchk, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1049,7 +1041,7 @@ iscsi_writeverify16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_writeverify16(iscsi, lba, datalen, blocksize, wrprotect,
|
||||
task = scsi_cdb_writeverify16(lba, datalen, blocksize, wrprotect,
|
||||
dpo, bytchk, group_number);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1083,7 +1075,7 @@ iscsi_verify10_task(struct iscsi_context *iscsi, int lun, unsigned char *data,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_verify10(iscsi, lba, datalen, vprotect, dpo, bytchk, blocksize);
|
||||
task = scsi_cdb_verify10(lba, datalen, vprotect, dpo, bytchk, blocksize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"verify10 cdb.");
|
||||
@@ -1116,7 +1108,7 @@ iscsi_verify12_task(struct iscsi_context *iscsi, int lun, unsigned char *data,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_verify12(iscsi, lba, datalen, vprotect, dpo, bytchk, blocksize);
|
||||
task = scsi_cdb_verify12(lba, datalen, vprotect, dpo, bytchk, blocksize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"verify12 cdb.");
|
||||
@@ -1149,7 +1141,7 @@ iscsi_verify16_task(struct iscsi_context *iscsi, int lun, unsigned char *data,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_cdb_verify16(iscsi, lba, datalen, vprotect, dpo, bytchk, blocksize);
|
||||
task = scsi_cdb_verify16(lba, datalen, vprotect, dpo, bytchk, blocksize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"verify16 cdb.");
|
||||
@@ -1176,7 +1168,7 @@ iscsi_modesense6_task(struct iscsi_context *iscsi, int lun, int dbd, int pc,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_modesense6(iscsi, dbd, pc, page_code, sub_page_code,
|
||||
task = scsi_cdb_modesense6(dbd, pc, page_code, sub_page_code,
|
||||
alloc_len);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1200,7 +1192,7 @@ iscsi_startstopunit_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_startstopunit(iscsi, immed, pcm, pc, no_flush,
|
||||
task = scsi_cdb_startstopunit(immed, pcm, pc, no_flush,
|
||||
loej, start);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1223,7 +1215,7 @@ iscsi_preventallow_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_preventallow(iscsi, prevent);
|
||||
task = scsi_cdb_preventallow(prevent);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"PreventAllowMediumRemoval cdb.");
|
||||
@@ -1245,7 +1237,7 @@ iscsi_synchronizecache10_task(struct iscsi_context *iscsi, int lun, int lba,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_synchronizecache10(iscsi, lba, num_blocks, syncnv,
|
||||
task = scsi_cdb_synchronizecache10(lba, num_blocks, syncnv,
|
||||
immed);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1268,7 +1260,7 @@ iscsi_synchronizecache16_task(struct iscsi_context *iscsi, int lun, uint64_t lba
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_synchronizecache16(iscsi, lba, num_blocks, syncnv,
|
||||
task = scsi_cdb_synchronizecache16(lba, num_blocks, syncnv,
|
||||
immed);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
@@ -1291,7 +1283,7 @@ iscsi_prefetch10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_prefetch10(iscsi, lba, num_blocks, immed, group);
|
||||
task = scsi_cdb_prefetch10(lba, num_blocks, immed, group);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"prefetch10 cdb.");
|
||||
@@ -1313,7 +1305,7 @@ iscsi_prefetch16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_prefetch16(iscsi, lba, num_blocks, immed, group);
|
||||
task = scsi_cdb_prefetch16(lba, num_blocks, immed, group);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"prefetch16 cdb.");
|
||||
@@ -1339,7 +1331,7 @@ iscsi_writesame10_task(struct iscsi_context *iscsi, int lun,
|
||||
struct scsi_task *task;
|
||||
struct iscsi_data outdata;
|
||||
|
||||
task = scsi_cdb_writesame10(iscsi, wrprotect, anchor, unmap, pbdata, lbdata, lba, group, num_blocks);
|
||||
task = scsi_cdb_writesame10(wrprotect, anchor, unmap, pbdata, lbdata, lba, group, num_blocks);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"writesame10 cdb.");
|
||||
@@ -1381,7 +1373,7 @@ iscsi_writesame16_task(struct iscsi_context *iscsi, int lun,
|
||||
struct scsi_task *task;
|
||||
struct iscsi_data outdata;
|
||||
|
||||
task = scsi_cdb_writesame16(iscsi, wrprotect, anchor, unmap, pbdata, lbdata, lba, group, num_blocks);
|
||||
task = scsi_cdb_writesame16(wrprotect, anchor, unmap, pbdata, lbdata, lba, group, num_blocks);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"writesame16 cdb.");
|
||||
@@ -1425,7 +1417,7 @@ iscsi_unmap_task(struct iscsi_context *iscsi, int lun, int anchor, int group,
|
||||
|
||||
xferlen = 8 + list_len * 16;
|
||||
|
||||
task = scsi_cdb_unmap(iscsi, anchor, group, xferlen);
|
||||
task = scsi_cdb_unmap(anchor, group, xferlen);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"unmap cdb.");
|
||||
@@ -1492,7 +1484,7 @@ iscsi_readtoc_task(struct iscsi_context *iscsi, int lun, int msf,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_readtoc(iscsi, msf, format, track_session, maxsize);
|
||||
task = scsi_cdb_readtoc(msf, format, track_session, maxsize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"read TOC cdb.");
|
||||
@@ -1513,7 +1505,7 @@ iscsi_reserve6_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_reserve6(iscsi);
|
||||
task = scsi_cdb_reserve6();
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"reserve6 cdb.");
|
||||
@@ -1534,7 +1526,7 @@ iscsi_release6_task(struct iscsi_context *iscsi, int lun,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_release6(iscsi);
|
||||
task = scsi_cdb_release6();
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"release6 cdb.");
|
||||
@@ -1556,7 +1548,7 @@ iscsi_report_supported_opcodes_task(struct iscsi_context *iscsi,
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_cdb_report_supported_opcodes(iscsi, return_timeouts, maxsize);
|
||||
task = scsi_cdb_report_supported_opcodes(return_timeouts, maxsize);
|
||||
if (task == NULL) {
|
||||
iscsi_set_error(iscsi, "Out-of-memory: Failed to create "
|
||||
"Maintenance In/Read Supported Op Codes cdb.");
|
||||
@@ -1576,3 +1568,57 @@ iscsi_scsi_get_task_from_pdu(struct iscsi_pdu *pdu)
|
||||
{
|
||||
return pdu->scsi_cbdata->task;
|
||||
}
|
||||
|
||||
int
|
||||
iscsi_scsi_cancel_task(struct iscsi_context *iscsi,
|
||||
struct scsi_task *task)
|
||||
{
|
||||
struct iscsi_pdu *pdu;
|
||||
|
||||
for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) {
|
||||
if (pdu->itt == task->itt) {
|
||||
SLIST_REMOVE(&iscsi->waitpdu, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) {
|
||||
if (pdu->itt == task->itt) {
|
||||
SLIST_REMOVE(&iscsi->outqueue, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct iscsi_pdu *pdu;
|
||||
|
||||
for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) {
|
||||
SLIST_REMOVE(&iscsi->waitpdu, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
}
|
||||
for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) {
|
||||
SLIST_REMOVE(&iscsi->outqueue, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,58 +35,39 @@
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include "slist.h"
|
||||
#include "iscsi.h"
|
||||
#include "scsi-lowlevel.h"
|
||||
#include "iscsi-private.h"
|
||||
|
||||
struct scsi_allocated_memory {
|
||||
struct scsi_allocated_memory *next;
|
||||
char buf[0];
|
||||
};
|
||||
|
||||
void
|
||||
scsi_free_scsi_task(struct scsi_task *task)
|
||||
{
|
||||
struct scsi_allocated_memory *mem;
|
||||
|
||||
if (task->iscsi != NULL) {
|
||||
while ((mem = task->mem)) {
|
||||
SLIST_REMOVE(&task->mem, mem);
|
||||
iscsi_free(task->iscsi, mem);
|
||||
}
|
||||
iscsi_free(task->iscsi,task->datain.data);
|
||||
iscsi_free(task->iscsi,task);
|
||||
} else {
|
||||
while ((mem = task->mem)) {
|
||||
SLIST_REMOVE(&task->mem, mem);
|
||||
free(mem);
|
||||
}
|
||||
free(task->datain.data);
|
||||
free(task);
|
||||
while ((mem = task->mem)) {
|
||||
SLIST_REMOVE(&task->mem, mem);
|
||||
free(mem);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
free(task->datain.data);
|
||||
free(task);
|
||||
}
|
||||
|
||||
void *
|
||||
scsi_malloc(struct scsi_task *task, size_t size)
|
||||
{
|
||||
struct scsi_allocated_memory *mem;
|
||||
if (task->iscsi != NULL)
|
||||
mem = iscsi_malloc(task->iscsi,sizeof(struct scsi_allocated_memory) + size);
|
||||
else
|
||||
mem = malloc(sizeof(struct scsi_allocated_memory) + size);
|
||||
|
||||
mem = malloc(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;
|
||||
return &mem->buf[0];
|
||||
}
|
||||
|
||||
struct value_string {
|
||||
@@ -183,15 +164,16 @@ scsi_sense_ascq_str(int ascq)
|
||||
* TESTUNITREADY
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_testunitready(struct iscsi_context *iscsi)
|
||||
scsi_cdb_testunitready(void)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_TESTUNITREADY;
|
||||
|
||||
task->cdb_size = 6;
|
||||
@@ -206,15 +188,16 @@ scsi_cdb_testunitready(struct iscsi_context *iscsi)
|
||||
* REPORTLUNS
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_reportluns_cdb(struct iscsi_context *iscsi, int report_type, int alloc_len)
|
||||
scsi_reportluns_cdb(int report_type, int alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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);
|
||||
@@ -286,15 +269,16 @@ scsi_reportluns_datain_unmarshall(struct scsi_task *task)
|
||||
* READCAPACITY10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_readcapacity10(struct iscsi_context *iscsi, int lba, int pmi)
|
||||
scsi_cdb_readcapacity10(int lba, int pmi)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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);
|
||||
@@ -319,7 +303,7 @@ scsi_cdb_readcapacity10(struct iscsi_context *iscsi, int lba, int pmi)
|
||||
* READTOC
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_readtoc(struct iscsi_context *iscsi, int msf, int format, int track_session, uint16_t alloc_len)
|
||||
scsi_cdb_readtoc(int msf, int format, int track_session, uint16_t alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
@@ -329,11 +313,12 @@ scsi_cdb_readtoc(struct iscsi_context *iscsi, int msf, int format, int track_ses
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READTOC;
|
||||
|
||||
if (msf) {
|
||||
@@ -472,15 +457,16 @@ scsi_readtoc_datain_unmarshall(struct scsi_task *task)
|
||||
* RESERVE6
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_reserve6(struct iscsi_context *iscsi)
|
||||
scsi_cdb_reserve6(void)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_RESERVE6;
|
||||
|
||||
task->cdb_size = 6;
|
||||
@@ -492,15 +478,16 @@ scsi_cdb_reserve6(struct iscsi_context *iscsi)
|
||||
* RELEASE10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_release6(struct iscsi_context *iscsi)
|
||||
scsi_cdb_release6(void)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_RELEASE6;
|
||||
|
||||
task->cdb_size = 6;
|
||||
@@ -651,15 +638,16 @@ scsi_maintenancein_datain_unmarshall(struct scsi_task *task)
|
||||
* MAINTENANCE In / Read Supported Op Codes
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_report_supported_opcodes(struct iscsi_context *iscsi, int return_timeouts, uint32_t alloc_len)
|
||||
scsi_cdb_report_supported_opcodes(int return_timeouts, uint32_t alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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;
|
||||
@@ -724,15 +712,16 @@ scsi_readcapacity10_datain_unmarshall(struct scsi_task *task)
|
||||
* INQUIRY
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_inquiry(struct iscsi_context *iscsi, int evpd, int page_code, int alloc_len)
|
||||
scsi_cdb_inquiry(int evpd, int page_code, int alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_INQUIRY;
|
||||
|
||||
if (evpd) {
|
||||
@@ -999,7 +988,7 @@ scsi_inquiry_datain_unmarshall(struct scsi_task *task)
|
||||
* READ6
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_read6(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize)
|
||||
scsi_cdb_read6(uint32_t lba, uint32_t xferlen, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
int num_blocks;
|
||||
@@ -1013,11 +1002,12 @@ scsi_cdb_read6(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ6;
|
||||
task->cdb_size = 6;
|
||||
|
||||
@@ -1046,15 +1036,16 @@ scsi_cdb_read6(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int
|
||||
* READ10
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_read10(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ10;
|
||||
|
||||
task->cdb[1] |= ((rdprotect & 0x07) << 5);
|
||||
@@ -1091,15 +1082,16 @@ scsi_cdb_read10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int
|
||||
* READ12
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_read12(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ12;
|
||||
|
||||
task->cdb[1] |= ((rdprotect & 0x07) << 5);
|
||||
@@ -1136,15 +1128,16 @@ scsi_cdb_read12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int
|
||||
* READ16
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_read16(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_READ16;
|
||||
|
||||
task->cdb[1] |= ((rdprotect & 0x07) << 5);
|
||||
@@ -1182,15 +1175,16 @@ scsi_cdb_read16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int
|
||||
* WRITE10
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_write10(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE10;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1227,15 +1221,16 @@ scsi_cdb_write10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, in
|
||||
* WRITE12
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_write12(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE12;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1272,15 +1267,16 @@ scsi_cdb_write12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, in
|
||||
* WRITE16
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_write16(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE16;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1318,15 +1314,16 @@ scsi_cdb_write16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, in
|
||||
* ORWRITE
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_orwrite(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_ORWRITE;
|
||||
|
||||
task->cdb[1] |= ((wrprotect & 0x07) << 5);
|
||||
@@ -1364,15 +1361,16 @@ scsi_cdb_orwrite(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, in
|
||||
* COMPAREANDWRITE
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_compareandwrite(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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);
|
||||
@@ -1409,15 +1407,16 @@ scsi_cdb_compareandwrite(struct iscsi_context *iscsi, uint64_t lba, uint32_t xfe
|
||||
* VERIFY10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_verify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
scsi_cdb_verify10(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_VERIFY10;
|
||||
|
||||
if (vprotect) {
|
||||
@@ -1454,15 +1453,16 @@ scsi_cdb_verify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, i
|
||||
* VERIFY12
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_verify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
scsi_cdb_verify12(uint32_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_VERIFY12;
|
||||
|
||||
if (vprotect) {
|
||||
@@ -1499,15 +1499,16 @@ scsi_cdb_verify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, i
|
||||
* VERIFY16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_verify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
scsi_cdb_verify16(uint64_t lba, uint32_t xferlen, int vprotect, int dpo, int bytchk, int blocksize)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_VERIFY16;
|
||||
|
||||
if (vprotect) {
|
||||
@@ -1545,15 +1546,16 @@ scsi_cdb_verify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, i
|
||||
* UNMAP
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_unmap(struct iscsi_context *iscsi, int anchor, int group, uint16_t xferlen)
|
||||
scsi_cdb_unmap(int anchor, int group, uint16_t xferlen)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_UNMAP;
|
||||
|
||||
if (anchor) {
|
||||
@@ -1578,15 +1580,16 @@ scsi_cdb_unmap(struct iscsi_context *iscsi, int anchor, int group, uint16_t xfer
|
||||
* WRITE_SAME10
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_writesame10(int wrprotect, int anchor, int unmap, int pbdata, int lbdata, uint32_t lba, int group, uint16_t num_blocks)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_SAME10;
|
||||
|
||||
if (wrprotect) {
|
||||
@@ -1621,15 +1624,16 @@ scsi_cdb_writesame10(struct iscsi_context *iscsi, int wrprotect, int anchor, int
|
||||
* WRITE_SAME16
|
||||
*/
|
||||
struct scsi_task *
|
||||
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)
|
||||
scsi_cdb_writesame16(int wrprotect, int anchor, int unmap, int pbdata, int lbdata, uint64_t lba, int group, uint32_t num_blocks)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_WRITE_SAME16;
|
||||
|
||||
if (wrprotect) {
|
||||
@@ -1665,17 +1669,18 @@ scsi_cdb_writesame16(struct iscsi_context *iscsi, int wrprotect, int anchor, int
|
||||
* MODESENSE6
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_modesense6(struct iscsi_context *iscsi, int dbd, enum scsi_modesense_page_control pc,
|
||||
scsi_cdb_modesense6(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 = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_MODESENSE6;
|
||||
|
||||
if (dbd) {
|
||||
@@ -1855,15 +1860,16 @@ scsi_modesense_datain_unmarshall(struct scsi_task *task)
|
||||
* STARTSTOPUNIT
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_startstopunit(struct iscsi_context *iscsi, int immed, int pcm, int pc, int no_flush, int loej, int start)
|
||||
scsi_cdb_startstopunit(int immed, int pcm, int pc, int no_flush, int loej, int start)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_STARTSTOPUNIT;
|
||||
|
||||
if (immed) {
|
||||
@@ -1900,15 +1906,16 @@ scsi_cdb_startstopunit(struct iscsi_context *iscsi, int immed, int pcm, int pc,
|
||||
* PREVENTALLOWMEDIUMREMOVAL
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_preventallow(struct iscsi_context *iscsi, int prevent)
|
||||
scsi_cdb_preventallow(int prevent)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_PREVENTALLOW;
|
||||
|
||||
task->cdb[4] = prevent & 0x03;
|
||||
@@ -1926,15 +1933,16 @@ scsi_cdb_preventallow(struct iscsi_context *iscsi, int prevent)
|
||||
* SYNCHRONIZECACHE10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_synchronizecache10(struct iscsi_context *iscsi, int lba, int num_blocks, int syncnv, int immed)
|
||||
scsi_cdb_synchronizecache10(int lba, int num_blocks, int syncnv, int immed)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SYNCHRONIZECACHE10;
|
||||
|
||||
if (syncnv) {
|
||||
@@ -1957,15 +1965,16 @@ scsi_cdb_synchronizecache10(struct iscsi_context *iscsi, int lba, int num_blocks
|
||||
* SYNCHRONIZECACHE16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_synchronizecache16(struct iscsi_context *iscsi, uint64_t lba, uint32_t num_blocks, int syncnv, int immed)
|
||||
scsi_cdb_synchronizecache16(uint64_t lba, uint32_t num_blocks, int syncnv, int immed)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SYNCHRONIZECACHE16;
|
||||
|
||||
if (syncnv) {
|
||||
@@ -1989,15 +1998,16 @@ scsi_cdb_synchronizecache16(struct iscsi_context *iscsi, uint64_t lba, uint32_t
|
||||
* PREFETCH10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_prefetch10(struct iscsi_context *iscsi, uint32_t lba, int num_blocks, int immed, int group)
|
||||
scsi_cdb_prefetch10(uint32_t lba, int num_blocks, int immed, int group)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_PREFETCH10;
|
||||
|
||||
if (immed) {
|
||||
@@ -2018,15 +2028,16 @@ scsi_cdb_prefetch10(struct iscsi_context *iscsi, uint32_t lba, int num_blocks, i
|
||||
* PREFETCH16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_prefetch16(struct iscsi_context *iscsi, uint64_t lba, int num_blocks, int immed, int group)
|
||||
scsi_cdb_prefetch16(uint64_t lba, int num_blocks, int immed, int group)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_PREFETCH16;
|
||||
|
||||
if (immed) {
|
||||
@@ -2049,15 +2060,16 @@ scsi_cdb_prefetch16(struct iscsi_context *iscsi, uint64_t lba, int num_blocks, i
|
||||
* SERVICEACTIONIN16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_serviceactionin16(struct iscsi_context *iscsi, enum scsi_service_action_in sa, uint32_t xferlen)
|
||||
scsi_cdb_serviceactionin16(enum scsi_service_action_in sa, uint32_t xferlen)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
if (task == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(task, 0, sizeof(struct scsi_task));
|
||||
task->cdb[0] = SCSI_OPCODE_SERVICE_ACTION_IN;
|
||||
|
||||
task->cdb[1] = sa;
|
||||
@@ -2081,24 +2093,25 @@ scsi_cdb_serviceactionin16(struct iscsi_context *iscsi, enum scsi_service_action
|
||||
* READCAPACITY16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_readcapacity16(struct iscsi_context *iscsi)
|
||||
scsi_cdb_readcapacity16(void)
|
||||
{
|
||||
return scsi_cdb_serviceactionin16(iscsi, SCSI_READCAPACITY16, 32);
|
||||
return scsi_cdb_serviceactionin16(SCSI_READCAPACITY16, 32);
|
||||
}
|
||||
|
||||
/*
|
||||
* GET_LBA_STATUS
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_get_lba_status(struct iscsi_context *iscsi, uint64_t starting_lba, uint32_t alloc_len)
|
||||
scsi_cdb_get_lba_status(uint64_t starting_lba, uint32_t alloc_len)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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;
|
||||
@@ -2124,15 +2137,16 @@ scsi_cdb_get_lba_status(struct iscsi_context *iscsi, uint64_t starting_lba, uint
|
||||
* WRITEVERIFY10
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writeverify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
scsi_cdb_writeverify10(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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);
|
||||
@@ -2166,15 +2180,16 @@ scsi_cdb_writeverify10(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferl
|
||||
* WRITEVERIFY12
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writeverify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
scsi_cdb_writeverify12(uint32_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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);
|
||||
@@ -2208,15 +2223,16 @@ scsi_cdb_writeverify12(struct iscsi_context *iscsi, uint32_t lba, uint32_t xferl
|
||||
* WRITEVERIFY16
|
||||
*/
|
||||
struct scsi_task *
|
||||
scsi_cdb_writeverify16(struct iscsi_context *iscsi, uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
scsi_cdb_writeverify16(uint64_t lba, uint32_t xferlen, int blocksize, int wrprotect, int dpo, int bytchk, int group_number)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
|
||||
task = scsi_create_scsi_task(iscsi);
|
||||
task = malloc(sizeof(struct scsi_task));
|
||||
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);
|
||||
@@ -2539,77 +2555,3 @@ scsi_task_get_data_in_buffer(struct scsi_task *task, uint32_t pos, ssize_t *coun
|
||||
|
||||
return &sdb->data[pos];
|
||||
}
|
||||
|
||||
int
|
||||
iscsi_scsi_task_cancel(struct iscsi_context *iscsi,
|
||||
struct scsi_task *task)
|
||||
{
|
||||
struct iscsi_pdu *pdu;
|
||||
|
||||
for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) {
|
||||
if (pdu->itt == task->itt) {
|
||||
while(task->in_buffers != NULL) {
|
||||
struct scsi_data_buffer *ptr = task->in_buffers;
|
||||
SLIST_REMOVE(&task->in_buffers, ptr);
|
||||
}
|
||||
SLIST_REMOVE(&iscsi->waitpdu, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) {
|
||||
if (pdu->itt == task->itt) {
|
||||
while(task->in_buffers != NULL) {
|
||||
struct scsi_data_buffer *ptr = task->in_buffers;
|
||||
SLIST_REMOVE(&task->in_buffers, ptr);
|
||||
}
|
||||
SLIST_REMOVE(&iscsi->outqueue, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void
|
||||
iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct iscsi_pdu *pdu;
|
||||
|
||||
for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) {
|
||||
struct scsi_task *task = iscsi_scsi_get_task_from_pdu(pdu);
|
||||
|
||||
while(task->in_buffers != NULL) {
|
||||
struct scsi_data_buffer *ptr = task->in_buffers;
|
||||
SLIST_REMOVE(&task->in_buffers, ptr);
|
||||
}
|
||||
SLIST_REMOVE(&iscsi->waitpdu, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
}
|
||||
for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) {
|
||||
struct scsi_task *task = iscsi_scsi_get_task_from_pdu(pdu);
|
||||
|
||||
while(task->in_buffers != NULL) {
|
||||
struct scsi_data_buffer *ptr = task->in_buffers;
|
||||
SLIST_REMOVE(&task->in_buffers, ptr);
|
||||
}
|
||||
SLIST_REMOVE(&iscsi->outqueue, pdu);
|
||||
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) {
|
||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
|
||||
pdu->private_data);
|
||||
}
|
||||
iscsi_free_pdu(iscsi, pdu);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ iscsi_task_mgmt_abort_task_async(struct iscsi_context *iscsi,
|
||||
struct scsi_task *task,
|
||||
iscsi_command_cb cb, void *private_data)
|
||||
{
|
||||
iscsi_scsi_task_cancel(iscsi, task);
|
||||
iscsi_scsi_cancel_task(iscsi, task);
|
||||
|
||||
return iscsi_task_mgmt_async(iscsi,
|
||||
task->lun, ISCSI_TM_ABORT_TASK,
|
||||
|
||||
Reference in New Issue
Block a user