From: Jason Dillaman Date: Mon, 28 Aug 2017 22:55:14 +0000 (-0400) Subject: tcmu-runner: remove UAPI patch and add Ceph repo for build X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=854bceb37f8a5dfcfba2aadbb8605d22a5bdfd58;p=ceph-build.git tcmu-runner: remove UAPI patch and add Ceph repo for build Signed-off-by: Jason Dillaman --- diff --git a/tcmu-runner/build/build_rpm b/tcmu-runner/build/build_rpm index 8c60039f..33c07af0 100644 --- a/tcmu-runner/build/build_rpm +++ b/tcmu-runner/build/build_rpm @@ -2,12 +2,40 @@ set -ex BRANCH=`branch_slash_filter $BRANCH` +CEPH_BRANCH=$(branch_slash_filter $CEPH_BRANCH) # Only do actual work when we are an RPM distro if test "$DISTRO" != "fedora" -a "$DISTRO" != "centos" -a "$DISTRO" != "rhel"; then exit 0 fi +## Get the desired CEPH_BRANCH/CEPH_SHA1 ceph repo +# Get .repo file from appropriate shaman build +REPO_URL="https://shaman.ceph.com/api/repos/ceph/$CEPH_BRANCH/$CEPH_SHA1/$DISTRO/$RELEASE/flavors/default/repo" +TIME_LIMIT=1200 +INTERVAL=30 +REPO_FOUND=0 + +# poll shaman for up to 10 minutes +while [ "$SECONDS" -le "$TIME_LIMIT" ] +do + if `curl --fail -L $REPO_URL > $WORKSPACE/shaman.repo`; then + echo "Ceph repo file has been added from shaman" + REPO_FOUND=1 + break + else + sleep $INTERVAL + fi +done + +if [[ "$REPO_FOUND" -eq 0 ]]; then + echo "Ceph lib repo does NOT exist in shaman" + exit 1 +fi + +# Copy the repo +sudo cp $WORKSPACE/shaman.repo /etc/yum.repos.d/ + ## Install any setup-time deps # We need these for the build sudo yum install -y cmake kernel-headers glib2-devel libnl3-devel \ @@ -26,197 +54,6 @@ cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ -DBUILD_SHARED_LIBS:BOOL=ON \ -DSUPPORT_SYSTEMD=ON . -if [[ ! -f /usr/include/linux/target_core_user.h ]]; then - # TODO patch build because RHEL7 does not currently include the - # necessary kernel header - cat > target_core_user-uapi-header.patch << EOF -diff --git a/consumer.c b/consumer.c -index 2350d6e..7dda52a 100644 ---- a/consumer.c -+++ b/consumer.c -@@ -36,7 +36,8 @@ - #include - #include - #define _BITS_UIO_H --#include -+/// TODO temporary until RHEL 7.3.x includes the UAPI header -+#include "linux/target_core_user.h" - #include "libtcmu.h" - #include "scsi_defs.h" - -diff --git a/libtcmu.c b/libtcmu.c -index c9df9d7..e945dce 100644 ---- a/libtcmu.c -+++ b/libtcmu.c -@@ -28,7 +28,8 @@ - #include - #include - --#include -+/// TODO temporary until RHEL 7.3.x includes the UAPI header -+#include "linux/target_core_user.h" - - #include - #include -diff --git a/linux/target_core_user.h b/linux/target_core_user.h -new file mode 100644 -index 0000000..c37e9ec ---- /dev/null -+++ b/linux/target_core_user.h -@@ -0,0 +1,149 @@ -+#ifndef __TARGET_CORE_USER_H -+#define __TARGET_CORE_USER_H -+ -+/* This header will be used by application too */ -+ -+#include -+#include -+ -+#ifndef __packed -+#define __packed __attribute__((packed)) -+#endif -+ -+#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))); -+ -+} __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; -+ -+} __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; -+ }; -+ -+} __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_MAX, -+}; -+#define TCMU_CMD_MAX (__TCMU_CMD_MAX - 1) -+ -+enum tcmu_genl_attr { -+ TCMU_ATTR_UNSPEC, -+ TCMU_ATTR_DEVICE, -+ TCMU_ATTR_MINOR, -+ __TCMU_ATTR_MAX, -+}; -+#define TCMU_ATTR_MAX (__TCMU_ATTR_MAX - 1) -+ -+#endif -EOF - patch -p1 < target_core_user-uapi-header.patch -fi - # Perform the build and install the files to DESTDIR NCPU=$(grep -c processor /proc/cpuinfo) make -j$NCPU diff --git a/tcmu-runner/config/definitions/tcmu-runner.yml b/tcmu-runner/config/definitions/tcmu-runner.yml index 9ac67690..50b36137 100644 --- a/tcmu-runner/config/definitions/tcmu-runner.yml +++ b/tcmu-runner/config/definitions/tcmu-runner.yml @@ -12,6 +12,16 @@ description: "The git branch (or tag) to build" default: "master" + - string: + name: CEPH_SHA1 + description: "The SHA1 of the ceph branch" + default: "latest" + + - string: + name: CEPH_BRANCH + description: "The branch of Ceph to get the repo file of for libcephfs" + default: "master" + - string: name: DISTROS description: "A list of distros to build for. Available options are: xenial, centos7, centos6, trusty-pbuilder, precise, wheezy, and jessie"