commit tcmu-runner for openSUSE:Factory
Hello community, here is the log from the commit of package tcmu-runner for openSUSE:Factory checked in at 2017-10-31 15:44:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tcmu-runner (Old) and /work/SRC/openSUSE:Factory/.tcmu-runner.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "tcmu-runner" Tue Oct 31 15:44:40 2017 rev:5 rq:537761 version:1.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/tcmu-runner/tcmu-runner.changes 2017-08-16 16:13:30.947050300 +0200 +++ /work/SRC/openSUSE:Factory/.tcmu-runner.new/tcmu-runner.changes 2017-10-31 15:44:42.112247511 +0100 @@ -1,0 +2,13 @@ +Wed Sep 20 22:59:29 UTC 2017 - lduncan@suse.com + +- Add two patches: make target_core_user.h local, to insulate + tcmu-runner from kernel version/data structure/naming + changes, and add include of <sys/uio.h> to that file, + to fix "stuct iovec" not defined issue (bsc#1058303), + adding patches: + * tcmu-runner-add-local-target_core_user-h + * tcmu-runner-remove-uio-include-for-iovec.patch + The latter patch is added only for SUSE version >= 13.3, + since it is only needed there. + +------------------------------------------------------------------- New: ---- tcmu-runner-add-local-target_core_user-h tcmu-runner-remove-uio-include-for-iovec.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tcmu-runner.spec ++++++ --- /var/tmp/diff_new_pack.lPDZPW/_old 2017-10-31 15:44:42.908218656 +0100 +++ /var/tmp/diff_new_pack.lPDZPW/_new 2017-10-31 15:44:42.912218511 +0100 @@ -41,6 +41,8 @@ Patch5: fixed-a-number-of-memory-leaks-with-deregistering-of-dbus-handlers Patch6: removed-all-check_config-callback-implementations-to-avoid-security-issues Patch7: %{name}-remove-handler-path-install-prefix.patch +Patch8: %{name}-add-local-target_core_user-h +Patch9: %{name}-remove-uio-include-for-iovec.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake BuildRequires: glib2-devel @@ -135,6 +137,10 @@ %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 +%if 0%{?suse_version} >= 1330 +%patch9 -p1 +%endif %build CMAKE_OPTIONS="\ ++++++ tcmu-runner-add-local-target_core_user-h ++++++ From: Mike Christie <mchristi@redhat.com> Date: Thu, 6 Jul 2017 14:41:25 -0500 Subject: runner: add local target_core_user.h Git-commit: 976ea46ce26443ff2d6cfecc96fbad144c9ed7e6 Patch-mainline: v1.3.0-rc1 It is kind of a pain to coordinate our upstream releases with kernel headers releases. To allow users to be able to not have to update kernel headers, and use newer runner versions, this adds a local target_core_user.h which will stay in sync with the upstream kernel. Acked-by: Lee Duncan <lduncan@suse.com> --- consumer.c | 2 libtcmu.c | 2 main.c | 2 target_core_user_local.h | 157 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 160 insertions(+), 3 deletions(-) --- a/consumer.c +++ b/consumer.c @@ -36,7 +36,7 @@ #include <stdint.h> #include <scsi/scsi.h> #define _BITS_UIO_H -#include <linux/target_core_user.h> +#include "target_core_user_local.h" #include "libtcmu.h" #include "scsi_defs.h" --- a/libtcmu.c +++ b/libtcmu.c @@ -28,12 +28,12 @@ #include <dirent.h> #include <scsi/scsi.h> -#include <linux/target_core_user.h> #include <libnl3/netlink/genl/genl.h> #include <libnl3/netlink/genl/mngt.h> #include <libnl3/netlink/genl/ctrl.h> +#include "target_core_user_local.h" #include "libtcmu.h" #include "libtcmu_log.h" #include "libtcmu_priv.h" --- a/main.c +++ b/main.c @@ -39,7 +39,7 @@ #include <scsi/scsi.h> #include <libkmod.h> -#include <linux/target_core_user.h> +#include "target_core_user_local.h" #include "darray.h" #include "tcmu-runner.h" #include "libtcmu.h" --- /dev/null +++ b/target_core_user_local.h @@ -0,0 +1,157 @@ +#ifndef __TARGET_CORE_USER_H +#define __TARGET_CORE_USER_H + +/* This header will be used by application too */ + +#include <linux/types.h> +#include <linux/uio.h> + +#define TCMU_VERSION "2.0" + +/* + * Ring Design + * ----------- + * + * The mmaped area is divided into three parts: + * 1) The mailbox (struct tcmu_mailbox, below) + * 2) The command ring + * 3) Everything beyond the command ring (data) + * + * The mailbox tells userspace the offset of the command ring from the + * start of the shared memory region, and how big the command ring is. + * + * The kernel passes SCSI commands to userspace by putting a struct + * tcmu_cmd_entry in the ring, updating mailbox->cmd_head, and poking + * userspace via uio's interrupt mechanism. + * + * tcmu_cmd_entry contains a header. If the header type is PAD, + * userspace should skip hdr->length bytes (mod cmdr_size) to find the + * next cmd_entry. + * + * Otherwise, the entry will contain offsets into the mmaped area that + * contain the cdb and data buffers -- the latter accessible via the + * iov array. iov addresses are also offsets into the shared area. + * + * When userspace is completed handling the command, set + * entry->rsp.scsi_status, fill in rsp.sense_buffer if appropriate, + * and also set mailbox->cmd_tail equal to the old cmd_tail plus + * hdr->length, mod cmdr_size. If cmd_tail doesn't equal cmd_head, it + * should process the next packet the same way, and so on. + */ + +#define TCMU_MAILBOX_VERSION 2 +#define ALIGN_SIZE 64 /* Should be enough for most CPUs */ +#define TCMU_MAILBOX_FLAG_CAP_OOOC (1 << 0) /* Out-of-order completions */ + +struct tcmu_mailbox { + __u16 version; + __u16 flags; + __u32 cmdr_off; + __u32 cmdr_size; + + __u32 cmd_head; + + /* Updated by user. On its own cacheline */ + __u32 cmd_tail __attribute__((__aligned__(ALIGN_SIZE))); + +} __attribute__((packed)); + +enum tcmu_opcode { + TCMU_OP_PAD = 0, + TCMU_OP_CMD, +}; + +/* + * Only a few opcodes, and length is 8-byte aligned, so use low bits for opcode. + */ +struct tcmu_cmd_entry_hdr { + __u32 len_op; + __u16 cmd_id; + __u8 kflags; +#define TCMU_UFLAG_UNKNOWN_OP 0x1 + __u8 uflags; + +} __attribute__((packed)); + +#define TCMU_OP_MASK 0x7 + +static __inline__ enum tcmu_opcode tcmu_hdr_get_op(__u32 len_op) +{ + return len_op & TCMU_OP_MASK; +} + +static __inline__ void tcmu_hdr_set_op(__u32 *len_op, enum tcmu_opcode op) +{ + *len_op &= ~TCMU_OP_MASK; + *len_op |= (op & TCMU_OP_MASK); +} + +static __inline__ __u32 tcmu_hdr_get_len(__u32 len_op) +{ + return len_op & ~TCMU_OP_MASK; +} + +static __inline__ void tcmu_hdr_set_len(__u32 *len_op, __u32 len) +{ + *len_op &= TCMU_OP_MASK; + *len_op |= len; +} + +/* Currently the same as SCSI_SENSE_BUFFERSIZE */ +#define TCMU_SENSE_BUFFERSIZE 96 + +struct tcmu_cmd_entry { + struct tcmu_cmd_entry_hdr hdr; + + union { + struct { + uint32_t iov_cnt; + uint32_t iov_bidi_cnt; + uint32_t iov_dif_cnt; + uint64_t cdb_off; + uint64_t __pad1; + uint64_t __pad2; + struct iovec iov[0]; + } req; + struct { + uint8_t scsi_status; + uint8_t __pad1; + uint16_t __pad2; + uint32_t __pad3; + char sense_buffer[TCMU_SENSE_BUFFERSIZE]; + } rsp; + }; + +} __attribute__((packed)); + +#define TCMU_OP_ALIGN_SIZE sizeof(uint64_t) + +enum tcmu_genl_cmd { + TCMU_CMD_UNSPEC, + TCMU_CMD_ADDED_DEVICE, + TCMU_CMD_REMOVED_DEVICE, + TCMU_CMD_RECONFIG_DEVICE, + TCMU_CMD_ADDED_DEVICE_DONE, + TCMU_CMD_REMOVED_DEVICE_DONE, + TCMU_CMD_RECONFIG_DEVICE_DONE, + TCMU_CMD_SET_FEATURES, + __TCMU_CMD_MAX, +}; +#define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1) + +enum tcmu_genl_attr { + TCMU_ATTR_UNSPEC, + TCMU_ATTR_DEVICE, + TCMU_ATTR_MINOR, + TCMU_ATTR_PAD, + TCMU_ATTR_DEV_CFG, + TCMU_ATTR_DEV_SIZE, + TCMU_ATTR_WRITECACHE, + TCMU_ATTR_CMD_STATUS, + TCMU_ATTR_DEVICE_ID, + TCMU_ATTR_SUPP_KERN_CMD_REPLY, + __TCMU_ATTR_MAX, +}; +#define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1) + +#endif ++++++ tcmu-runner-remove-uio-include-for-iovec.patch ++++++ From: Lee Duncan <lduncan@suse.com> Date: Wed Oct 25 14:45:04 PDT 2017 Subject: remove uio include for iovec Newer versions of the kernel and glibc-devel cause compiles of tcmu-runner to complain about duplicate "struct iovec" definitions. This fixes that issue by including files in the correct order. Signed-off-by: Lee Duncan <lduncan@suse.com> --- diff -aurp tcmu-runner-1.2.0.orig/consumer.c tcmu-runner-1.2.0/consumer.c --- tcmu-runner-1.2.0.orig/consumer.c 2017-10-25 11:18:25.805340765 -0700 +++ tcmu-runner-1.2.0/consumer.c 2017-10-25 14:38:56.456122857 -0700 @@ -32,6 +32,7 @@ #include <unistd.h> #include <sys/mman.h> #include <poll.h> +#include <sys/uio.h> #include <stdint.h> #include <scsi/scsi.h> diff -aurp tcmu-runner-1.2.0.orig/target_core_user_local.h tcmu-runner-1.2.0/target_core_user_local.h --- tcmu-runner-1.2.0.orig/target_core_user_local.h 2017-10-25 11:18:25.805340765 -0700 +++ tcmu-runner-1.2.0/target_core_user_local.h 2017-10-25 14:39:48.618507387 -0700 @@ -4,7 +4,6 @@ /* This header will be used by application too */ #include <linux/types.h> -#include <linux/uio.h> #define TCMU_VERSION "2.0"
participants (1)
-
root@hilbert.suse.de