diff --git a/include/iscsi.h b/include/iscsi.h index a350596..a3cbf54 100644 --- a/include/iscsi.h +++ b/include/iscsi.h @@ -480,11 +480,11 @@ int iscsi_synchronizecache10_async(struct iscsi_context *iscsi, int lun, int immed, iscsi_command_cb cb, void *private_data); -int iscsi_read10_async(struct iscsi_context *iscsi, int lun, int lba, - int datalen, int blocksize, iscsi_command_cb cb, +int iscsi_read10_async(struct iscsi_context *iscsi, int lun, uint32_t lba, + uint32_t datalen, int blocksize, iscsi_command_cb cb, void *private_data); int iscsi_write10_async(struct iscsi_context *iscsi, int lun, - unsigned char *data, int datalen, int lba, int fua, + unsigned char *data, uint32_t datalen, uint32_t lba, int fua, int fuanv, int blocksize, iscsi_command_cb cb, void *private_data); int iscsi_modesense6_async(struct iscsi_context *iscsi, int lun, int dbd, diff --git a/include/scsi-lowlevel.h b/include/scsi-lowlevel.h index e44f3f5..88ad385 100644 --- a/include/scsi-lowlevel.h +++ b/include/scsi-lowlevel.h @@ -66,6 +66,14 @@ enum scsi_xfer_dir { struct scsi_reportluns_params { int report_type; }; +struct scsi_read10_params { + uint32_t lba; + uint32_t num_blocks; +}; +struct scsi_write10_params { + uint32_t lba; + uint32_t num_blocks; +}; struct scsi_readcapacity10_params { int lba; int pmi; @@ -105,6 +113,8 @@ struct scsi_task { int expxferlen; unsigned char cdb[SCSI_CDB_MAX_SIZE]; union { + struct scsi_read10_params read10; + struct scsi_write10_params write10; struct scsi_readcapacity10_params readcapacity10; struct scsi_reportluns_params reportluns; struct scsi_inquiry_params inquiry; @@ -361,8 +371,8 @@ struct scsi_task *scsi_cdb_modesense6(int dbd, int scsi_datain_getfullsize(struct scsi_task *task); void *scsi_datain_unmarshall(struct scsi_task *task); -struct scsi_task *scsi_cdb_read10(int lba, int xferlen, int blocksize); -struct scsi_task *scsi_cdb_write10(int lba, int xferlen, int fua, int fuanv, +struct scsi_task *scsi_cdb_read10(uint32_t lba, uint32_t xferlen, int blocksize); +struct scsi_task *scsi_cdb_write10(uint32_t lba, uint32_t xferlen, int fua, int fuanv, int blocksize); struct scsi_task *scsi_cdb_synchronizecache10(int lba, int num_blocks, diff --git a/lib/scsi-command.c b/lib/scsi-command.c index e43bdc2..4a42115 100644 --- a/lib/scsi-command.c +++ b/lib/scsi-command.c @@ -569,8 +569,8 @@ iscsi_readcapacity10_async(struct iscsi_context *iscsi, int lun, int lba, } int -iscsi_read10_async(struct iscsi_context *iscsi, int lun, int lba, - int datalen, int blocksize, +iscsi_read10_async(struct iscsi_context *iscsi, int lun, uint32_t lba, + uint32_t datalen, int blocksize, iscsi_command_cb cb, void *private_data) { struct scsi_task *task; @@ -597,7 +597,7 @@ iscsi_read10_async(struct iscsi_context *iscsi, int lun, int lba, int iscsi_write10_async(struct iscsi_context *iscsi, int lun, unsigned char *data, - int datalen, int lba, int fua, int fuanv, int blocksize, + uint32_t datalen, uint32_t lba, int fua, int fuanv, int blocksize, iscsi_command_cb cb, void *private_data) { struct scsi_task *task; diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index 6a240a7..3a60f90 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -507,7 +507,7 @@ scsi_inquiry_datain_unmarshall(struct scsi_task *task) * READ10 */ struct scsi_task * -scsi_cdb_read10(int lba, int xferlen, int blocksize) +scsi_cdb_read10(uint32_t lba, uint32_t xferlen, int blocksize) { struct scsi_task *task; @@ -526,6 +526,9 @@ scsi_cdb_read10(int lba, int xferlen, int blocksize) task->xfer_dir = SCSI_XFER_READ; task->expxferlen = xferlen; + task->params.read10.lba = lba; + task->params.read10.num_blocks = xferlen/blocksize; + return task; } @@ -533,7 +536,7 @@ scsi_cdb_read10(int lba, int xferlen, int blocksize) * WRITE10 */ struct scsi_task * -scsi_cdb_write10(int lba, int xferlen, int fua, int fuanv, int blocksize) +scsi_cdb_write10(uint32_t lba, uint32_t xferlen, int fua, int fuanv, int blocksize) { struct scsi_task *task; @@ -559,6 +562,9 @@ scsi_cdb_write10(int lba, int xferlen, int fua, int fuanv, int blocksize) task->xfer_dir = SCSI_XFER_WRITE; task->expxferlen = xferlen; + task->params.write10.lba = lba; + task->params.write10.num_blocks = xferlen/blocksize; + return task; }