diff --git a/include/iscsi.h b/include/iscsi.h index 6064f8c..0ee7d42 100644 --- a/include/iscsi.h +++ b/include/iscsi.h @@ -633,6 +633,11 @@ EXTERN struct scsi_task * iscsi_synchronizecache10_sync(struct iscsi_context *iscsi, int lun, int lba, int num_blocks, int syncnv, int immed); +EXTERN struct scsi_task * +iscsi_write10_sync(struct iscsi_context *iscsi, int lun, + unsigned char *data, uint32_t datalen, uint32_t lba, int fua, + int fuanv, int blocksize); + /* * This function is used when the application wants to specify its own buffers to read the data diff --git a/lib/libiscsi.def b/lib/libiscsi.def index 0aae019..ff7e767 100644 --- a/lib/libiscsi.def +++ b/lib/libiscsi.def @@ -56,6 +56,7 @@ iscsi_readcapacity10_sync iscsi_synchronizecache10_sync iscsi_read6_sync iscsi_read10_sync +iscsi_write10_sync iscsi_task_cancel poll scsi_task_add_data_in_buffer diff --git a/lib/sync.c b/lib/sync.c index 07b0f5c..c112f98 100644 --- a/lib/sync.c +++ b/lib/sync.c @@ -302,6 +302,26 @@ iscsi_synchronizecache10_sync(struct iscsi_context *iscsi, int lun, int lba, return state.task; } +struct scsi_task * +iscsi_write10_sync(struct iscsi_context *iscsi, int lun, unsigned char *data, uint32_t datalen, uint32_t lba, + int fua, int fuanv, int blocksize) +{ + struct iscsi_sync_state state; + + memset(&state, 0, sizeof(state)); + + if (iscsi_write10_task(iscsi, lun, data, datalen, lba, fua, fuanv, blocksize, + scsi_sync_cb, &state) == NULL) { + iscsi_set_error(iscsi, + "Failed to send Write10 command"); + return NULL; + } + + event_loop(iscsi, &state); + + return state.task; +} + struct scsi_task * iscsi_scsi_command_sync(struct iscsi_context *iscsi, int lun, struct scsi_task *task, struct iscsi_data *data)