commit:     7e3015666946f8d6dde2c0674d35553bbb934888
Author:     Mike Frysinger <vapier <AT> chromium <DOT> org>
AuthorDate: Fri Jan 24 18:35:55 2020 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Fri Jan 24 18:36:06 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7e301566

sys-block/fio: add fix from upstream for verification

Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>

 .../fio/files/fio-3.16-verify_only_numberio.patch  |  60 ++++++++++
 sys-block/fio/fio-3.16-r1.ebuild                   | 130 +++++++++++++++++++++
 2 files changed, 190 insertions(+)

diff --git a/sys-block/fio/files/fio-3.16-verify_only_numberio.patch 
b/sys-block/fio/files/fio-3.16-verify_only_numberio.patch
new file mode 100644
index 00000000000..52fb389f62b
--- /dev/null
+++ b/sys-block/fio/files/fio-3.16-verify_only_numberio.patch
@@ -0,0 +1,60 @@
+From 8859c0675aec03467ed65dfc79ecc874d026f165 Mon Sep 17 00:00:00 2001
+From: Gwendal Grignou <gwen...@chromium.org>
+Date: Mon, 13 Jan 2020 16:35:10 -0800
+Subject: [PATCH] verify: Fix test to not check for numberio when verify_only
+ is true
+
+io->numberio can not be populated when verify_only is true, because
+do_dry_run() build and complete IOs immediately, so it can not replicate
+the numberio that was produced when the data was layered on the media.
+
+Without this fix, using write_random
+[write_stress]
+filename=${FILENAME}
+size=${FILESIZE}
+verify_only=${VERIFY_ONLY}
+readwrite=randwrite
+bs=4k
+ioengine=libaio
+iodepth=32
+direct=1
+do_verify=1
+verify=crc32c
+
+'VERIFY_ONLY=1 FILENAME=/dev/sda1 FILESIZE=1M fio write_random' passes,
+but
+'VERIFY_ONLY=0 FILENAME=/dev/sda1 FILESIZE=1M fio write_random' fails:
+"""verify_only option fails with verify: bad header numberio 1, wanted
+0""".
+The fix addresses the problem by not checking numberio.
+
+Fixes #732
+
+Signed-off-by: Gwendal Grignou <gwen...@chromium.org>
+---
+ verify.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/verify.c b/verify.c
+index a2c0d41dbb8c..cf299ebf9643 100644
+--- a/verify.c
++++ b/verify.c
+@@ -845,13 +845,11 @@ static int verify_header(struct io_u *io_u, struct 
thread_data *td,
+        * For read-only workloads, the program cannot be certain of the
+        * last numberio written to a block. Checking of numberio will be
+        * done only for workloads that write data.  For verify_only,
+-       * numberio will be checked in the last iteration when the correct
+-       * state of numberio, that would have been written to each block
+-       * in a previous run of fio, has been reached.
++       * numberio check is skipped.
+        */
+       if (td_write(td) && (td_min_bs(td) == td_max_bs(td)) &&
+           !td->o.time_based)
+-              if (!td->o.verify_only || td->o.loops == 0)
++              if (!td->o.verify_only)
+                       if (hdr->numberio != io_u->numberio) {
+                               log_err("verify: bad header numberio %"PRIu16
+                                       ", wanted %"PRIu16,
+-- 
+2.23.0
+

diff --git a/sys-block/fio/fio-3.16-r1.ebuild b/sys-block/fio/fio-3.16-r1.ebuild
new file mode 100644
index 00000000000..2538a0046ce
--- /dev/null
+++ b/sys-block/fio/fio-3.16-r1.ebuild
@@ -0,0 +1,130 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+PYTHON_COMPAT=( python2_7 python3_6 )
+
+inherit python-r1 toolchain-funcs
+
+MY_PV="${PV/_rc/-rc}"
+MY_P="${PN}-${MY_PV}"
+
+DESCRIPTION="Jens Axboe's Flexible IO tester"
+HOMEPAGE="https://brick.kernel.dk/snaps/";
+SRC_URI="https://brick.kernel.dk/snaps/${MY_P}.tar.bz2";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~ia64 ~ppc ~ppc64 ~x86"
+IUSE="aio curl glusterfs gnuplot gtk libressl numa rbd rdma static tcmalloc 
zlib"
+REQUIRED_USE="gnuplot? ( ${PYTHON_REQUIRED_USE} )
+       libressl? ( curl )"
+
+BDEPEND="virtual/pkgconfig"
+
+# GTK+:2 does not offer static libaries.
+LIB_DEPEND="aio? ( dev-libs/libaio[static-libs(+)] )
+       curl? (
+               net-misc/curl:=[static-libs(+)]
+               !libressl? ( dev-libs/openssl:0=[static-libs(+)] )
+               libressl? ( dev-libs/libressl:0=[static-libs(+)] )
+       )
+       glusterfs? ( sys-cluster/glusterfs[static-libs(+)] )
+       gtk? ( dev-libs/glib:2[static-libs(+)] )
+       numa? ( sys-process/numactl[static-libs(+)] )
+       rbd? ( sys-cluster/ceph[static-libs(+)] )
+       rdma? (
+               sys-fabric/libibverbs[static-libs(+)]
+               sys-fabric/librdmacm[static-libs(+)]
+       )
+       tcmalloc? ( dev-util/google-perftools:=[static-libs(+)] )
+       zlib? ( sys-libs/zlib[static-libs(+)] )"
+RDEPEND="!static? ( ${LIB_DEPEND//\[static-libs(+)]} )
+       gtk? ( x11-libs/gtk+:2 )"
+DEPEND="${RDEPEND}
+       static? ( ${LIB_DEPEND} )"
+RDEPEND+="
+       gnuplot? (
+               sci-visualization/gnuplot
+               $(python_gen_any_dep 'dev-python/pandas[${PYTHON_USEDEP}]')
+               ${PYTHON_DEPS}
+       )"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+       "${FILESDIR}"/fio-2.2.13-libmtd.patch
+       "${FILESDIR}"/fio-3.16-snprintf.patch
+       "${FILESDIR}"/fio-3.16-verify_only_numberio.patch
+)
+
+python_check_deps() {
+       has_version "dev-python/pandas[${PYTHON_USEDEP}]"
+}
+
+src_prepare() {
+       default
+
+       sed -i '/^DEBUGFLAGS/s: -D_FORTIFY_SOURCE=2::g' Makefile || die
+
+       # Many checks don't have configure flags.
+       sed -i \
+               -e "s:\<pkg-config\>:$(tc-getPKG_CONFIG):" \
+               -e '/if compile_prog "" "-lz" "zlib" *; *then/  '"s::if $(usex 
zlib true false) ; then:" \
+               -e '/if compile_prog "" "-laio" "libaio" ; then/'"s::if $(usex 
aio true false) ; then:" \
+               configure || die
+}
+
+src_configure() {
+       chmod g-w "${T}"
+       # not a real configure script
+       # TODO: pmem
+       set -- \
+       ./configure \
+               --disable-optimizations \
+               --extra-cflags="${CFLAGS} ${CPPFLAGS}" \
+               --cc="$(tc-getCC)" \
+               --disable-pmem \
+               $(usex curl '' '--disable-http') \
+               $(usex glusterfs '' '--disable-gfapi') \
+               $(usex gtk '--enable-gfio' '') \
+               $(usex numa '' '--disable-numa') \
+               $(usex rbd '' '--disable-rbd') \
+               $(usex rdma '' '--disable-rdma') \
+               $(usex static '--build-static' '') \
+               $(usex tcmalloc '' '--disable-tcmalloc')
+       echo "$@"
+       "$@" || die 'configure failed'
+}
+
+src_compile() {
+       emake V=1 OPTFLAGS=
+}
+
+src_install() {
+       emake install DESTDIR="${D}" prefix="${EPREFIX}/usr" 
mandir="${EPREFIX}/usr/share/man"
+
+       if use gnuplot ; then
+               sed -i 's:python2.7:python:g' \
+                       "${ED}/usr/bin/fio2gnuplot" \
+                       "${ED}/usr/bin/fiologparser_hist.py" \
+                       "${ED}/usr/bin/fiologparser.py"
+               python_replicate_script \
+                       "${ED}/usr/bin/fio2gnuplot" \
+                       "${ED}/usr/bin/fiologparser_hist.py" \
+                       "${ED}/usr/bin/fiologparser.py"
+       else
+               rm "${ED}"/usr/bin/{fio2gnuplot,fio_generate_plots} || die
+               rm 
"${ED}"/usr/share/man/man1/{fio2gnuplot,fio_generate_plots}.1 || die
+               rm "${ED}"/usr/share/fio/*.gpm || die
+               rmdir "${ED}"/usr/share/fio/ 2>/dev/null
+       fi
+
+       # This tool has security/parallel issues -- it hardcodes 
/tmp/template.fio.
+       rm "${ED}"/usr/bin/genfio || die
+
+       dodoc README REPORTING-BUGS HOWTO
+       docinto examples
+       dodoc examples/*
+}

Reply via email to