Hello community,

here is the log from the commit of package fio for openSUSE:Factory checked in 
at 2015-04-05 02:04:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fio (Old)
 and      /work/SRC/openSUSE:Factory/.fio.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fio"

Changes:
--------
--- /work/SRC/openSUSE:Factory/fio/fio.changes  2015-01-30 11:00:30.000000000 
+0100
+++ /work/SRC/openSUSE:Factory/.fio.new/fio.changes     2015-04-05 
02:04:34.000000000 +0200
@@ -1,0 +2,12 @@
+Sat Apr  4 12:58:13 UTC 2015 - mplus...@suse.com
+
+- Update to 2.2.6
+  * make per-thread IOPS more accurate
+  * man page updates
+  * misc bugfixes
+- Cleanup spec file with spec-cleaner
+- Update dependencies
+  * enable numa
+  * enable glusterfs
+
+-------------------------------------------------------------------

Old:
----
  fio-2.2.5.tar.bz2

New:
----
  fio-2.2.6.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ fio.spec ++++++
--- /var/tmp/diff_new_pack.xfkKfX/_old  2015-04-05 02:04:35.000000000 +0200
+++ /var/tmp/diff_new_pack.xfkKfX/_new  2015-04-05 02:04:35.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package fio
 #
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 # Copyright (c) 2012 Pascal Bleser <pascal.ble...@opensuse.org>
 #
 # All modifications and additions to the file contributed by third parties
@@ -18,20 +18,23 @@
 
 
 Name:           fio
-Version:        2.2.5
+Version:        2.2.6
 Release:        0
 Summary:        Flexible I/O Tester/benchmarker
 License:        GPL-2.0
 Group:          System/Benchmark
-Source:         http://brick.kernel.dk/snaps/fio-%{version}.tar.bz2
 Url:            http://freshmeat.net/projects/fio/
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-Suggests:       gnuplot
-Suggests:       gfio
-BuildRequires:  gcc
+Source:         http://brick.kernel.dk/snaps/fio-%{version}.tar.bz2
 BuildRequires:  libaio-devel
-BuildRequires:  make
 BuildRequires:  pkg-config
+BuildRequires:  zlib-devel
+Suggests:       gfio
+Suggests:       gnuplot
+BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+%if 0%{?suse_version} > 1320
+BuildRequires:  glusterfs-devel
+BuildRequires:  libnuma-devel
+%endif
 
 %description
 fio is an I/O tool meant to be used both for benchmark and stress/hardware
@@ -47,39 +50,34 @@
 Summary:        Graphical front end for fio
 Group:          System/Benchmark
 BuildRequires:  gtk2-devel
-BuildRequires:  zlib-devel
 
 %description -n gfio
 gfio is a gtk based graphical front-end for fio.  It is often installed on the
 testers workstation whereas fio would be installed on the server.
 
-
 %prep
 %setup -q -n "fio-%{version}"
 
 %build
 ./configure --enable-gfio
-%__make \
+make \
     V=1 \
     OPTFLAGS="%{optflags}" \
-    CC="%__cc" \
+    CC="gcc" \
     prefix="%{_prefix}" \
     libdir="%{_libdir}/fio" \
     mandir="%{_mandir}"
 
 %install
-%__make \
+make \
     V=1 \
-    DESTDIR="%{buildroot}" \
+    DESTDIR=%{buildroot} \
     prefix="%{_prefix}" \
     bindir="%{_bindir}" \
     libdir="%{_libdir}/fio" \
     mandir="%{_mandir}" \
     install
 
-%clean
-%{?buildroot:%__rm -rf "%{buildroot}"}
-
 %files
 %defattr(-,root,root)
 %doc COPYING README examples
@@ -92,9 +90,9 @@
 %{_bindir}/fio-dedupe
 %{_bindir}/fio-genzipf
 %{_datadir}/fio
-%doc %{_mandir}/man1/fio.1%{ext_man}
-%doc %{_mandir}/man1/fio_generate_plots.1%{ext_man}
-%doc %{_mandir}/man1/fio2gnuplot.1%{ext_man}
+%{_mandir}/man1/fio.1%{ext_man}
+%{_mandir}/man1/fio_generate_plots.1%{ext_man}
+%{_mandir}/man1/fio2gnuplot.1%{ext_man}
 
 %files -n gfio
 %defattr(-,root,root)

++++++ fio-2.2.5.tar.bz2 -> fio-2.2.6.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/FIO-VERSION-GEN 
new/fio-2.2.6/FIO-VERSION-GEN
--- old/fio-2.2.5/FIO-VERSION-GEN       2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/FIO-VERSION-GEN       2015-02-27 16:30:04.000000000 +0100
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=FIO-VERSION-FILE
-DEF_VER=fio-2.2.5
+DEF_VER=fio-2.2.6
 
 LF='
 '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/HOWTO new/fio-2.2.6/HOWTO
--- old/fio-2.2.5/HOWTO 2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/HOWTO 2015-02-27 16:30:04.000000000 +0100
@@ -919,10 +919,10 @@
                random IO. If this option is given, fio will just get a
                new random offset without looking at past io history. This
                means that some blocks may not be read or written, and that
-               some blocks may be read/written more than once. This option
-               is mutually exclusive with verify= if and only if multiple
-               blocksizes (via bsrange=) are used, since fio only tracks
-               complete rewrites of blocks.
+               some blocks may be read/written more than once. If this option
+               is used with verify= and multiple blocksizes (via bsrange=),
+               only intact blocks are verified, i.e., partially-overwritten
+               blocks are ignored.
 
 softrandommap=bool See norandommap. If fio runs with the random block map
                enabled and it fails to allocate the map, if this option is
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/LICENSE new/fio-2.2.6/LICENSE
--- old/fio-2.2.5/LICENSE       2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/LICENSE       1970-01-01 01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-As specified by the COPYING file, fio is free software published under version
-2 of the GPL license. That covers the copying part of the license. By using 
fio,
-you are also promising to uphold the following moral obligations:
-
-- If you publish results that are done using fio, it must be clearly stated
-  that fio was used. The specific version should also be listed.
-
-- If you develop features or bug fixes for fio, they should be sent upstream
-  for inclusion into the main repository. This isn't specific to fio, that
-  is a general rule for any open source project. It's just the Right Thing
-  to do. Plus it means that you don't have to maintain the feature or change
-  internally. In the long run, this is saving you a lot of time.
-
-I would consider the above to fall under "common courtesy", but since
-people tend to have differing opinions of that, it doesn't hurt to spell out
-my expectations clearly.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/MORAL-LICENSE new/fio-2.2.6/MORAL-LICENSE
--- old/fio-2.2.5/MORAL-LICENSE 1970-01-01 01:00:00.000000000 +0100
+++ new/fio-2.2.6/MORAL-LICENSE 2015-02-27 16:30:04.000000000 +0100
@@ -0,0 +1,17 @@
+As specified by the COPYING file, fio is free software published under version
+2 of the GPL license. That covers the copying part of the license. When using
+fio, you are encouraged to uphold the following moral obligations:
+
+- If you publish results that are done using fio, it should be clearly stated
+  that fio was used. The specific version should also be listed.
+
+- If you develop features or bug fixes for fio, they should be sent upstream
+  for inclusion into the main repository. This isn't specific to fio, that
+  is a general rule for any open source project. It's just the Right Thing
+  to do. Plus it means that you don't have to maintain the feature or change
+  internally. In the long run, this is saving you a lot of time.
+
+I would consider the above to fall under "common courtesy", but since
+people tend to have differing opinions of that, it doesn't hurt to spell out
+my expectations clearly.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/README new/fio-2.2.6/README
--- old/fio-2.2.5/README        2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/README        2015-02-27 16:30:04.000000000 +0100
@@ -311,7 +311,7 @@
 
 fio --client=server --remote-config /path/to/file.fio
 
-Then the fio serer will open this local (to the server) job file instead
+Then the fio server will open this local (to the server) job file instead
 of being passed one from the client.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/arch/arch-arm.h 
new/fio-2.2.6/arch/arch-arm.h
--- old/fio-2.2.5/arch/arch-arm.h       2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/arch/arch-arm.h       2015-02-27 16:30:04.000000000 +0100
@@ -19,7 +19,8 @@
 #endif
 
 #if defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__) \
-       || defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5T__) || defined 
(__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5TEJ__) \
+       || defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5T__) || defined 
(__ARM_ARCH_5E__)\
+       || defined (__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5TEJ__) \
        || defined(__ARM_ARCH_6__)  || defined(__ARM_ARCH_6J__) || 
defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
 #define nop             __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t")
 #define read_barrier() __asm__ __volatile__ ("" : : : "memory")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/arch/arch-s390.h 
new/fio-2.2.6/arch/arch-s390.h
--- old/fio-2.2.5/arch/arch-s390.h      2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/arch/arch-s390.h      2015-02-27 16:30:04.000000000 +0100
@@ -40,6 +40,7 @@
 
 #define ARCH_CPU_CLOCK_CYCLES_PER_USEC 1
 #define ARCH_HAVE_CPU_CLOCK
+#undef ARCH_CPU_CLOCK_WRAPS
 
 #define ARCH_HAVE_INIT
 extern int tsc_reliable;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/arch/arch.h new/fio-2.2.6/arch/arch.h
--- old/fio-2.2.5/arch/arch.h   2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/arch/arch.h   2015-02-27 16:30:04.000000000 +0100
@@ -30,6 +30,8 @@
 
 extern unsigned long arch_flags;
 
+#define ARCH_CPU_CLOCK_WRAPS
+
 #if defined(__i386__)
 #include "arch-x86.h"
 #elif defined(__x86_64__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/backend.c new/fio-2.2.6/backend.c
--- old/fio-2.2.5/backend.c     2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/backend.c     2015-02-27 16:30:04.000000000 +0100
@@ -565,6 +565,8 @@
                        io_u->end_io = verify_io_u;
 
                ddir = io_u->ddir;
+               if (!td->o.disable_slat)
+                       fio_gettime(&io_u->start_time, NULL);
 
                ret = td_io_queue(td, io_u);
                switch (ret) {
@@ -656,13 +658,13 @@
        if (!td->o.number_ios)
                return 0;
 
-       number_ios = ddir_rw_sum(td->this_io_blocks);
+       number_ios = ddir_rw_sum(td->io_blocks);
        number_ios += td->io_u_queued + td->io_u_in_flight;
 
-       return number_ios >= td->o.number_ios;
+       return number_ios >= (td->o.number_ios * td->loops);
 }
 
-static int io_bytes_exceeded(struct thread_data *td)
+static int io_issue_bytes_exceeded(struct thread_data *td)
 {
        unsigned long long bytes, limit;
 
@@ -680,6 +682,29 @@
        else
                limit = td->o.size;
 
+       limit *= td->loops;
+       return bytes >= limit || exceeds_number_ios(td);
+}
+
+static int io_complete_bytes_exceeded(struct thread_data *td)
+{
+       unsigned long long bytes, limit;
+
+       if (td_rw(td))
+               bytes = td->this_io_bytes[DDIR_READ] + 
td->this_io_bytes[DDIR_WRITE];
+       else if (td_write(td))
+               bytes = td->this_io_bytes[DDIR_WRITE];
+       else if (td_read(td))
+               bytes = td->this_io_bytes[DDIR_READ];
+       else
+               bytes = td->this_io_bytes[DDIR_TRIM];
+
+       if (td->o.io_limit)
+               limit = td->o.io_limit;
+       else
+               limit = td->o.size;
+
+       limit *= td->loops;
        return bytes >= limit || exceeds_number_ios(td);
 }
 
@@ -703,18 +728,24 @@
 
        lat_target_init(td);
 
+       total_bytes = td->o.size;
+       /*
+       * Allow random overwrite workloads to write up to io_limit
+       * before starting verification phase as 'size' doesn't apply.
+       */
+       if (td_write(td) && td_random(td) && td->o.norandommap)
+               total_bytes = max(total_bytes, (uint64_t) td->o.io_limit);
        /*
         * If verify_backlog is enabled, we'll run the verify in this
         * handler as well. For that case, we may need up to twice the
         * amount of bytes.
         */
-       total_bytes = td->o.size;
        if (td->o.verify != VERIFY_NONE &&
           (td_write(td) && td->o.verify_backlog))
                total_bytes += td->o.size;
 
        while ((td->o.read_iolog_file && !flist_empty(&td->io_log_list)) ||
-               (!flist_empty(&td->trim_list)) || !io_bytes_exceeded(td) ||
+               (!flist_empty(&td->trim_list)) || !io_issue_bytes_exceeded(td) 
||
                td->o.time_based) {
                struct timeval comp_time;
                struct io_u *io_u;
@@ -1231,7 +1262,7 @@
        td_set_runstate(td, TD_RUNNING);
 
        while ((td->o.read_iolog_file && !flist_empty(&td->io_log_list)) ||
-               (!flist_empty(&td->trim_list)) || !io_bytes_exceeded(td)) {
+               (!flist_empty(&td->trim_list)) || 
!io_complete_bytes_exceeded(td)) {
                struct io_u *io_u;
                int ret;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/configure new/fio-2.2.6/configure
--- old/fio-2.2.5/configure     2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/configure     2015-02-27 16:30:04.000000000 +0100
@@ -887,7 +887,7 @@
 int main(int argc, char **argv)
 {
   struct bitmask *mask = numa_parse_nodestring(NULL);
-  return 0;
+  return mask->size == 0;
 }
 EOF
 if compile_prog "" "" "libnuma api"; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/examples/ssd-test.fio 
new/fio-2.2.6/examples/ssd-test.fio
--- old/fio-2.2.5/examples/ssd-test.fio 2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/examples/ssd-test.fio 2015-02-27 16:30:04.000000000 +0100
@@ -14,7 +14,7 @@
 bs=4k
 ioengine=libaio
 iodepth=4
-size=1g
+size=10g
 direct=1
 runtime=60
 directory=/mount-point-of-ssd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/filelock.c new/fio-2.2.6/filelock.c
--- old/fio-2.2.5/filelock.c    2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/filelock.c    2015-02-27 16:30:04.000000000 +0100
@@ -101,7 +101,7 @@
                return;
 
        assert(flist_empty(&fld->list));
-       fio_mutex_remove(&fld->lock);
+       __fio_mutex_remove(&fld->lock);
 
        while (!flist_empty(&fld->free_list)) {
                struct fio_filelock *ff;
@@ -109,7 +109,7 @@
                ff = flist_first_entry(&fld->free_list, struct fio_filelock, 
list);
 
                flist_del_init(&ff->list);
-               fio_mutex_remove(&ff->lock);
+               __fio_mutex_remove(&ff->lock);
        }
 
        sfree(fld);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/fio.1 new/fio-2.2.6/fio.1
--- old/fio-2.2.5/fio.1 2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/fio.1 2015-02-27 16:30:04.000000000 +0100
@@ -20,6 +20,9 @@
 .BI \-\-output \fR=\fPfilename
 Write output to \fIfilename\fR.
 .TP
+.BI \-\-output-format \fR=\fPformat
+Set the reporting format to \fInormal\fR, \fIterse\fR, or \fIjson\fR.
+.TP
 .BI \-\-runtime \fR=\fPruntime
 Limit run time to \fIruntime\fR seconds.
 .TP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/fio.h new/fio-2.2.6/fio.h
--- old/fio-2.2.5/fio.h 2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/fio.h 2015-02-27 16:30:04.000000000 +0100
@@ -240,6 +240,7 @@
         */
        uint64_t io_issues[DDIR_RWDIR_CNT];
        uint64_t io_issue_bytes[DDIR_RWDIR_CNT];
+       uint64_t loops;
 
        /*
         * Completions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/gettime.c new/fio-2.2.6/gettime.c
--- old/fio-2.2.5/gettime.c     2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/gettime.c     2015-02-27 16:30:04.000000000 +0100
@@ -17,6 +17,8 @@
 static unsigned long cycles_per_usec;
 static unsigned long inv_cycles_per_usec;
 static uint64_t max_cycles_for_mult;
+#endif
+#ifdef ARCH_CPU_CLOCK_WRAPS
 static unsigned long long cycles_start, cycles_wrap;
 #endif
 int tsc_reliable = 0;
@@ -171,6 +173,7 @@
 #endif
 
                t = get_cpu_clock();
+#ifdef ARCH_CPU_CLOCK_WRAPS
                if (t < cycles_start && !cycles_wrap)
                        cycles_wrap = 1;
                else if (cycles_wrap && t >= cycles_start && !tv->warned) {
@@ -179,6 +182,7 @@
                }
 
                t -= cycles_start;
+#endif
                tv->last_cycles = t;
                tv->last_tv_valid = 1;
 #ifdef ARCH_CPU_CLOCK_CYCLES_PER_USEC
@@ -311,8 +315,10 @@
        inv_cycles_per_usec = 16777216UL / cycles_per_usec;
        max_cycles_for_mult = ~0ULL / inv_cycles_per_usec;
        dprint(FD_TIME, "inv_cycles_per_usec=%lu\n", inv_cycles_per_usec);
+#ifdef ARCH_CPU_CLOCK_WRAPS
        cycles_start = get_cpu_clock();
        dprint(FD_TIME, "cycles_start=%llu\n", cycles_start);
+#endif
        return 0;
 }
 #else
@@ -477,12 +483,20 @@
        uint32_t last_seq;
        int i;
 
-       memset(&cpu_mask, 0, sizeof(cpu_mask));
+       if (fio_cpuset_init(&cpu_mask)) {
+               int __err = errno;
+
+               log_err("clock cpuset init failed: %s\n", strerror(__err));
+               goto err_out;
+       }
+
        fio_cpu_set(&cpu_mask, t->cpu);
 
        if (fio_setaffinity(gettid(), cpu_mask) == -1) {
-               log_err("clock setaffinity failed\n");
-               return (void *) 1;
+               int __err = errno;
+
+               log_err("clock setaffinity failed: %s\n", strerror(__err));
+               goto err;
        }
 
        pthread_mutex_lock(&t->lock);
@@ -518,9 +532,14 @@
         * indefinitely. Check for that and return failure.
         */
        if (!t->entries[i - 1].tsc && !t->entries[0].tsc)
-               return (void *) 1;
+               goto err;
 
+       fio_cpuset_exit(&cpu_mask);
        return NULL;
+err:
+       fio_cpuset_exit(&cpu_mask);
+err_out:
+       return (void *) 1;
 }
 
 static int clock_cmp(const void *p1, const void *p2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/gettime.h new/fio-2.2.6/gettime.h
--- old/fio-2.2.5/gettime.h     2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/gettime.h     2015-02-27 16:30:04.000000000 +0100
@@ -24,7 +24,7 @@
 
 static inline int fio_gettime_offload(struct timeval *tv)
 {
-       size_t last_sec;
+       time_t last_sec;
 
        if (!fio_tv)
                return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/idletime.c new/fio-2.2.6/idletime.c
--- old/fio-2.2.5/idletime.c    2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/idletime.c    2015-02-27 16:30:04.000000000 +0100
@@ -43,16 +43,26 @@
        return tunit / CALIBRATE_SCALE;
 }
 
+static void free_cpu_affinity(struct idle_prof_thread *ipt)
+{
+#if defined(FIO_HAVE_CPU_AFFINITY)
+       fio_cpuset_exit(&ipt->cpu_mask);
+#endif
+}
+
 static int set_cpu_affinity(struct idle_prof_thread *ipt)
 {
 #if defined(FIO_HAVE_CPU_AFFINITY)
-       os_cpu_mask_t cpu_mask;
+       if (fio_cpuset_init(&ipt->cpu_mask)) {
+               log_err("fio: cpuset init failed\n");
+               return -1;
+       }
 
-       memset(&cpu_mask, 0, sizeof(cpu_mask));
-       fio_cpu_set(&cpu_mask, ipt->cpu);
+       fio_cpu_set(&ipt->cpu_mask, ipt->cpu);
 
-       if (fio_setaffinity(gettid(), cpu_mask)) {
+       if (fio_setaffinity(gettid(), ipt->cpu_mask)) {
                log_err("fio: fio_setaffinity failed\n");
+               fio_cpuset_exit(&ipt->cpu_mask);
                return -1;
        }
 
@@ -98,7 +108,7 @@
        if (retval == -1) {
                ipt->state = TD_EXITED;
                pthread_mutex_unlock(&ipt->init_lock);
-               return NULL;
+               goto do_exit;
        }
 
        ipt->state = TD_INITIALIZED;
@@ -113,13 +123,13 @@
        /* exit if other threads failed to initialize */
        if (ipc.status == IDLE_PROF_STATUS_ABORT) {
                pthread_mutex_unlock(&ipt->start_lock);
-               return NULL;
+               goto do_exit;
        }
 
        /* exit if we are doing calibration only */
        if (ipc.status == IDLE_PROF_STATUS_CALI_STOP) {
                pthread_mutex_unlock(&ipt->start_lock);
-               return NULL;
+               goto do_exit;
        }
 
        fio_gettime(&ipt->tps, NULL);
@@ -143,6 +153,8 @@
        ipt->state = TD_EXITED;
        pthread_mutex_unlock(&ipt->start_lock);
 
+do_exit:
+       free_cpu_affinity(ipt);
        return NULL;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/idletime.h new/fio-2.2.6/idletime.h
--- old/fio-2.2.5/idletime.h    2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/idletime.h    2015-02-27 16:30:04.000000000 +0100
@@ -34,6 +34,8 @@
        pthread_cond_t  cond;
        pthread_mutex_t init_lock;
        pthread_mutex_t start_lock;
+
+       os_cpu_mask_t cpu_mask;
 };
 
 struct idle_prof_common {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/init.c new/fio-2.2.6/init.c
--- old/fio-2.2.5/init.c        2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/init.c        2015-02-27 16:30:04.000000000 +0100
@@ -596,8 +596,7 @@
        if (o->norandommap && o->verify != VERIFY_NONE
            && !fixed_block_size(o))  {
                log_err("fio: norandommap given for variable block sizes, "
-                       "verify disabled\n");
-               o->verify = VERIFY_NONE;
+                       "verify limited\n");
                ret = warnings_fatal;
        }
        if (o->bs_unaligned && (o->odirect || td->io_ops->flags & FIO_RAWIO))
@@ -764,6 +763,10 @@
                fio_gtod_offload = 1;
        }
 
+       td->loops = o->loops;
+       if (!td->loops)
+               td->loops = 1;
+
        return ret;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/io_u.c new/fio-2.2.6/io_u.c
--- old/fio-2.2.5/io_u.c        2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/io_u.c        2015-02-27 16:30:04.000000000 +0100
@@ -68,6 +68,9 @@
        if (td->o.zone_range)
                max_size = td->o.zone_range;
 
+       if (td->o.min_bs[ddir] > td->o.ba[ddir])
+               max_size -= td->o.min_bs[ddir] - td->o.ba[ddir];
+
        max_blocks = max_size / (uint64_t) td->o.ba[ddir];
        if (!max_blocks)
                return 0;
@@ -1866,7 +1869,7 @@
 {
        struct thread_options *o = &td->o;
 
-       if (o->compress_percentage) {
+       if (o->compress_percentage || o->dedupe_percentage) {
                unsigned int perc = td->o.compress_percentage;
                struct frand_state *rs;
                unsigned int left = max_bs;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/iolog.c new/fio-2.2.6/iolog.c
--- old/fio-2.2.5/iolog.c       2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/iolog.c       2015-02-27 16:30:04.000000000 +0100
@@ -250,6 +250,7 @@
        p = &td->io_hist_tree.rb_node;
        parent = NULL;
        while (*p) {
+               int overlap = 0;
                parent = *p;
 
                __ipo = rb_entry(parent, struct io_piece, rb_node);
@@ -257,11 +258,18 @@
                        p = &(*p)->rb_left;
                else if (ipo->file > __ipo->file)
                        p = &(*p)->rb_right;
-               else if (ipo->offset < __ipo->offset)
+               else if (ipo->offset < __ipo->offset) {
                        p = &(*p)->rb_left;
-               else if (ipo->offset > __ipo->offset)
+                       overlap = ipo->offset + ipo->len > __ipo->offset;
+               }
+               else if (ipo->offset > __ipo->offset) {
                        p = &(*p)->rb_right;
-               else {
+                       overlap = __ipo->offset + __ipo->len > ipo->offset;
+               }
+               else
+                       overlap = 1;
+
+               if (overlap) {
                        dprint(FD_IO, "iolog: overlap %llu/%lu, %llu/%lu",
                                __ipo->offset, __ipo->len,
                                ipo->offset, ipo->len);
@@ -868,10 +876,12 @@
        if (ret < 0) {
                perror("fread");
                fclose(f);
+               free(buf);
                return 1;
        } else if (ret != 1) {
                log_err("fio: short read on reading log\n");
                fclose(f);
+               free(buf);
                return 1;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/lib/axmap.c new/fio-2.2.6/lib/axmap.c
--- old/fio-2.2.5/lib/axmap.c   2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/lib/axmap.c   2015-02-27 16:30:04.000000000 +0100
@@ -125,6 +125,7 @@
                        free(axmap->levels[i].map);
 
        free(axmap->levels);
+       free(axmap);
        return NULL;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/os/os-android.h 
new/fio-2.2.6/os/os-android.h
--- old/fio-2.2.5/os/os-android.h       2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/os/os-android.h       2015-02-27 16:30:04.000000000 +0100
@@ -4,6 +4,7 @@
 #define        FIO_OS  os_android
 
 #include <sys/ioctl.h>
+#include <sys/mman.h>
 #include <sys/uio.h>
 #include <sys/syscall.h>
 #include <sys/vfs.h>
@@ -37,10 +38,13 @@
 
 #define OS_MAP_ANON            MAP_ANONYMOUS
 
+#ifndef POSIX_MADV_DONTNEED
 #define posix_madvise   madvise
 #define POSIX_MADV_DONTNEED MADV_DONTNEED
 #define POSIX_MADV_SEQUENTIAL  MADV_SEQUENTIAL
 #define POSIX_MADV_RANDOM      MADV_RANDOM
+#endif
+
 #ifdef MADV_REMOVE
 #define FIO_MADV_FREE  MADV_REMOVE
 #endif
@@ -261,4 +265,12 @@
        return errno;
 }
 
+#ifdef CONFIG_SCHED_IDLE
+static inline int fio_set_sched_idle(void)
+{
+        struct sched_param p = { .sched_priority = 0, };
+        return sched_setscheduler(gettid(), SCHED_IDLE, &p);
+}
+#endif
+
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/os/windows/install.wxs 
new/fio-2.2.6/os/windows/install.wxs
--- old/fio-2.2.5/os/windows/install.wxs        2015-01-21 21:07:43.000000000 
+0100
+++ new/fio-2.2.6/os/windows/install.wxs        2015-02-27 16:30:04.000000000 
+0100
@@ -10,7 +10,7 @@
        <Product Id="*"
          Codepage="1252" Language="1033"
          Manufacturer="fio" Name="fio"
-         UpgradeCode="2338A332-5511-43CF-B9BD-5C60496CCFCC" Version="2.2.5">
+         UpgradeCode="2338A332-5511-43CF-B9BD-5C60496CCFCC" Version="2.2.6">
                <Package
                  Description="Flexible IO Tester"
                  InstallerVersion="301" Keywords="Installer,MSI,Database"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/parse.c new/fio-2.2.6/parse.c
--- old/fio-2.2.5/parse.c       2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/parse.c       2015-02-27 16:30:04.000000000 +0100
@@ -506,6 +506,7 @@
                if (!is_time && o->is_time)
                        is_time = o->is_time;
 
+               tmp[sizeof(tmp) - 1] = '\0';
                strncpy(tmp, ptr, sizeof(tmp) - 1);
                p = strchr(tmp, ',');
                if (p)
@@ -705,6 +706,7 @@
                char tmp[128];
                char *p1, *p2;
 
+               tmp[sizeof(tmp) - 1] = '\0';
                strncpy(tmp, ptr, sizeof(tmp) - 1);
 
                /* Handle bsrange with separate read,write values: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/fio-2.2.5/stat.c new/fio-2.2.6/stat.c
--- old/fio-2.2.5/stat.c        2015-01-21 21:07:43.000000000 +0100
+++ new/fio-2.2.6/stat.c        2015-02-27 16:30:04.000000000 +0100
@@ -674,9 +674,9 @@
                struct group_run_stats *rs, int ddir, struct json_object 
*parent)
 {
        unsigned long min, max;
-       unsigned long long bw, iops;
+       unsigned long long bw;
        unsigned int *ovals = NULL;
-       double mean, dev;
+       double mean, dev, iops;
        unsigned int len, minv, maxv;
        int i;
        const char *ddirname[] = {"read", "write", "trim"};
@@ -693,17 +693,18 @@
        json_object_add_value_object(parent,
                ts->unified_rw_rep ? "mixed" : ddirname[ddir], dir_object);
 
-       iops = bw = 0;
+       bw = 0;
+       iops = 0.0;
        if (ts->runtime[ddir]) {
                uint64_t runt = ts->runtime[ddir];
 
                bw = ((1000 * ts->io_bytes[ddir]) / runt) / 1024;
-               iops = (1000 * (uint64_t) ts->total_io_u[ddir]) / runt;
+               iops = (1000.0 * (uint64_t) ts->total_io_u[ddir]) / runt;
        }
 
        json_object_add_value_int(dir_object, "io_bytes", ts->io_bytes[ddir] >> 
10);
        json_object_add_value_int(dir_object, "bw", bw);
-       json_object_add_value_int(dir_object, "iops", iops);
+       json_object_add_value_float(dir_object, "iops", iops);
        json_object_add_value_int(dir_object, "runtime", ts->runtime[ddir]);
        json_object_add_value_int(dir_object, "total_ios", 
ts->total_io_u[ddir]);
        json_object_add_value_int(dir_object, "short_ios", 
ts->short_io_u[ddir]);


Reply via email to