diff --git a/include/iser-private.h b/include/iser-private.h index 73749cb..ff38793 100644 --- a/include/iser-private.h +++ b/include/iser-private.h @@ -85,9 +85,6 @@ enum data_dir{ #define ISER_MIN_POSTED_RX (ISER_DEF_XMIT_CMDS_MAX >> 2) -#define ISER_RX_PAD_SIZE (256 - (ISER_RX_PAYLOAD_SIZE + \ - sizeof(struct ibv_mr*) + sizeof(struct ibv_sge))) - /** * struct iser_hdr - iSER header * @@ -121,13 +118,15 @@ struct iser_hdr { struct iser_rx_desc { struct iser_hdr iser_header; + char pad1[4]; char iscsi_header[ISCSI_RAW_HEADER_SIZE]; char data[ISER_RECV_DATA_SEG_LEN]; struct ibv_sge rx_sg; struct ibv_mr *hdr_mr; - char pad[ISER_RX_PAD_SIZE]; -} __attribute__((packed)); + char pad2[24]; +}; +static_assert(sizeof(struct iser_rx_desc) == 256, "iser_rx_desc size != 256"); /** * struct iser_tx_desc - iSER TX descriptor (for send wr_id) diff --git a/include/scsi-lowlevel.h b/include/scsi-lowlevel.h index f5fd037..bedefd8 100644 --- a/include/scsi-lowlevel.h +++ b/include/scsi-lowlevel.h @@ -30,6 +30,10 @@ extern "C" { #endif +#ifndef static_assert +#define static_assert(e, m) extern char unused_array[1 - 2 * !(e)] +#endif + #define SCSI_CDB_MAX_SIZE 16 enum scsi_opcode { diff --git a/lib/Makefile.am b/lib/Makefile.am index 7161ed2..4a8a916 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -17,7 +17,7 @@ libiscsipriv_la_SOURCES += iser.c endif if HAVE_LINUX_ISER -libiscsipriv_la_LDFLAGS = -libverbs -lrdmacm +libiscsipriv_la_LDFLAGS = -libverbs -lrdmacm -lpthread endif libiscsipriv_la_CPPFLAGS = -I${srcdir}/../include -I$(srcdir)/include \ diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c index 169d2b0..9bec9e1 100644 --- a/test-tool/iscsi-support.c +++ b/test-tool/iscsi-support.c @@ -370,10 +370,14 @@ static struct scsi_task *send_scsi_command(struct scsi_device *sdev, struct scsi io_hdr.timeout = 5000; if(ioctl(sdev->sgio_fd, SG_IO, &io_hdr) < 0){ + int err = errno; + if (sdev->error_str != NULL) { free(discard_const(sdev->error_str)); } - sdev->error_str = strdup("SG_IO ioctl failed"); + if (asprintf(&sdev->error_str, "SG_IO ioctl failed: %s", + strerror(err)) < 0) + sdev->error_str = NULL; return NULL; }