Libiscsi: Introducing new functions for zero-copy write operations
iscsi-command: Adding new functions for all write operations (WRITE10,
WRITE12, WRITE16, WRITEOR, etc') for cases where the user wants
to pass his own io vectors (prevent memcpy).
new functions are called iscsi_write*_iov_task and looks
very similar to the iscsi_write*_task, only they get
scsi_iovec pointer and number of scsi_iovec as
parameters.
Change-Id: I719552b4cbda4f937975b5df7e77b4844e48cd16
Signed-off-by: Roy Shterman <roysh@mellanox.com>
This commit is contained in:
committed by
Ronnie Sahlberg
parent
2bba53d31d
commit
c85042bacb
163
include/iscsi.h
163
include/iscsi.h
@@ -860,11 +860,21 @@ iscsi_write10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_write10_iov_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify10_iov_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_read12_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
uint32_t datalen, int blocksize,
|
||||
int rdprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
@@ -880,11 +890,21 @@ iscsi_write12_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_write12_iov_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify12_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify12_iov_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_read16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
uint32_t datalen, int blocksize,
|
||||
int rdprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
@@ -900,16 +920,32 @@ iscsi_write16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_write16_iov_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeatomic16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeatomic16_iov_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int group_number,
|
||||
iscsi_command_cb cb, void *private_data,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_orwrite_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_orwrite_iov_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_startstopunit_task(struct iscsi_context *iscsi, int lun,
|
||||
int immed, int pcm, int pc,
|
||||
int no_flush, int loej, int start,
|
||||
@@ -924,41 +960,83 @@ iscsi_compareandwrite_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_compareandwrite_iov_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify16_iov_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
iscsi_command_cb cb, void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify10_task(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, iscsi_command_cb cb,
|
||||
void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify10_iov_task(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, iscsi_command_cb cb,
|
||||
void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify12_task(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, iscsi_command_cb cb,
|
||||
void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify12_iov_task(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, iscsi_command_cb cb,
|
||||
void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify16_task(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint64_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, iscsi_command_cb cb,
|
||||
void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify16_iov_task(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint64_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, iscsi_command_cb cb,
|
||||
void *private_data, struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame10_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint16_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame10_iov_task(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint16_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group,
|
||||
iscsi_command_cb cb, void *private_data,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame16_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint32_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame16_iov_task(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint32_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group,
|
||||
iscsi_command_cb cb, void *private_data,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_modeselect6_task(struct iscsi_context *iscsi, int lun,
|
||||
int pf, int sp, struct scsi_mode_page *mp,
|
||||
iscsi_command_cb cb, void *private_data);
|
||||
@@ -1079,10 +1157,21 @@ iscsi_write10_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_write10_iov_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify10_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify10_iov_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_read12_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
uint32_t datalen, int blocksize,
|
||||
@@ -1099,11 +1188,23 @@ iscsi_write12_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_write12_iov_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify12_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify12_iov_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_read16_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
uint32_t datalen, int blocksize,
|
||||
@@ -1120,16 +1221,34 @@ iscsi_write16_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_write16_iov_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeatomic16_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeatomic16_iov_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_orwrite_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_orwrite_iov_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_startstopunit_sync(struct iscsi_context *iscsi, int lun,
|
||||
int immed, int pcm, int pc,
|
||||
@@ -1144,11 +1263,23 @@ iscsi_compareandwrite_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_compareandwrite_iov_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int fua, int fua_nv, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify16_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writeverify16_iov_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen, int blocksize,
|
||||
int wrprotect, int dpo, int bytchk, int group_number,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_readcapacity10_sync(struct iscsi_context *iscsi, int lun, int lba,
|
||||
int pmi);
|
||||
@@ -1194,30 +1325,62 @@ iscsi_verify10_sync(struct iscsi_context *iscsi, int lun,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify10_iov_sync(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify12_sync(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify12_iov_sync(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint32_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify16_sync(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint64_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_verify16_iov_sync(struct iscsi_context *iscsi, int lun,
|
||||
unsigned char *data, uint32_t datalen, uint64_t lba,
|
||||
int vprotect, int dpo, int bytchk,
|
||||
int blocksize, struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame10_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint16_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame10_iov_sync(struct iscsi_context *iscsi, int lun, uint32_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint16_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame16_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint32_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_writesame16_iov_sync(struct iscsi_context *iscsi, int lun, uint64_t lba,
|
||||
unsigned char *data, uint32_t datalen,
|
||||
uint32_t num_blocks,
|
||||
int anchor, int unmap, int wrprotect, int group,
|
||||
struct scsi_iovec *iov, int niov);
|
||||
|
||||
EXTERN struct scsi_task *
|
||||
iscsi_persistent_reserve_in_sync(struct iscsi_context *iscsi, int lun,
|
||||
int sa, uint16_t xferlen);
|
||||
|
||||
Reference in New Issue
Block a user