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(a)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(a)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(a)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(a)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(a)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"