Recent changes (master)
The following changes since commit 7903bf87725b18495a06f7199342f167147712eb:
Merge branch 'master' of https://github.com/jan--f/fio (2016-09-15 07:57:38 -0600)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to d22042d2117b78e16b06bab0880422c417007d37:
workqueue: kill SW_F_EXITED (2016-09-16 12:48:32 -0600)
----------------------------------------------------------------
Ben England (3):
generate unique pathname for each fio --client log file adhere to fio coding standards
safety first!
Jens Axboe (9):
io_u: fix overflow in 64-bit bssplit calculation
Merge branch 'client-unique-log-names' of https://github.com/bengland2/fio into log-unique
client: coding style fixups
mac: fix for 10.12 having clockid_t
configure: harden clockid_t test
Fio 2.14
Fixup two compile warnings
iolog: dprint() casts for 32-bit warnings
workqueue: kill SW_F_EXITED
FIO-VERSION-GEN | 2 +- client.c | 22 +++++++++++++++++----- configure | 22 ++++++++++++++++++++++ init.c | 13 +++++++------ io_u.c | 9 +++++---- iolog.c | 10 ++++++---- os/os-mac.h | 2 ++ os/windows/install.wxs | 2 +- workqueue.c | 10 +++------- 9 files changed, 64 insertions(+), 28 deletions(-)
---
Diff of recent changes:
FIO-VERSION-GEN +1 -1
@@ -1,7 +1,7 @@ #!/bin/sh GVF=FIO-VERSION-FILE -DEF_VER=fio-2.13 +DEF_VER=fio-2.14 LF=' '
client.c +17 -5
@@ -1295,6 +1295,7 @@ static int fio_client_handle_iolog(struct fio_client *client, {struct cmd_iolog_pdu *pdu;bool store_direct; +char *log_pathname; pdu =convert_iolog (cmd, &store_direct);if (!pdu) {
@@ -1302,15 +1303,26 @@ static int fio_client_handle_iolog(struct fio_client *client,return 1 ; } +/* allocate buffer big enough for next sprintf() call */ + log_pathname =malloc (10 +strlen ((char *)pdu->name) + +strlen (client->hostname)); +if (!log_pathname) { +log_err ("fio: memory allocation of unique pathname failed" ); +return -1 ; + } +/* generate a unique pathname for the log file using hostname */ +sprintf (log_pathname,"%s.%s" , pdu->name, client->hostname); +if (store_direct) {ssize_t ret;size_t sz;int fd; - fd =open ((const char *) pdu->name, + fd =open ((const char *) log_pathname,O_WRONLY |O_CREAT |O_TRUNC ,0644 );if (fd <0 ) { -log_err ("fio: open log: %s\n" ,strerror (errno)); +log_err ("fio: open log %s: %s\n" , + log_pathname,strerror (errno));return 1 ; }
@@ -1326,10 +1338,10 @@ static int fio_client_handle_iolog(struct fio_client *client,return 0 ; }else {FILE *f; - - f =fopen ((const char *) pdu->name,"w" ); + f =fopen ((const char *) log_pathname,"w" );if (!f) { -log_err ("fio: fopen log: %s\n" ,strerror (errno)); +log_err ("fio: fopen log %s : %s\n" , + log_pathname,strerror (errno));return 1 ; }
configure +22 -0
@@ -794,6 +794,25 @@ fi echo "CLOCK_MONOTONIC_PRECISE $clock_monotonic_precise" ########################################## +# clockid_t probe +clockid_t="no" +cat > $TMPC << EOF +#include <stdio.h> +#include <string.h> +#include <time.h> +int main(int argc, char **argv) +{ + clockid_t cid; + memset(&cid, 0, sizeof(cid)); + return clock_gettime(cid, NULL); +} +EOF +if compile_prog "" "$LIBS" "clockid_t"; then + clockid_t="yes" +fi +echo "clockid_t $clockid_t" + +########################################## # gettimeofday() probe gettimeofday="no" cat > $TMPC << EOF
@@ -1722,6 +1741,9 @@ fi if test "$clock_monotonic_precise" = "yes" ; then output_sym "CONFIG_CLOCK_MONOTONIC_PRECISE" fi +if test "$clockid_t" = "yes"; then + output_sym "CONFIG_CLOCKID_T" +fi if test "$gettimeofday" = "yes" ; then output_sym "CONFIG_GETTIMEOFDAY" fi
init.c +7 -6
@@ -1426,12 +1426,6 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num, }if (o->hist_log_file) { -#ifndef CONFIG_ZLIB -if (td->client_type) { -log_err ("fio: --write_hist_log requires zlib in client/server mode\n" ); - goto err; - } -#endif struct log_params p = { .td = td, .avg_msec = o->log_avg_msec,
@@ -1444,6 +1438,13 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num, };const char *suf; +#ifndef CONFIG_ZLIB +if (td->client_type) { +log_err ("fio: --write_hist_log requires zlib in client/server mode\n" ); + goto err; + } +#endif +if (p.log_gz_store) suf ="log.fz" ;else
io_u.c +5 -4
@@ -531,8 +531,7 @@ static unsigned int __get_next_buflen(struct thread_data *td, struct io_u *io_u,int ddir = io_u->ddir;unsigned int buflen =0 ;unsigned int minbs, maxbs; -uint64_t frand_max; -unsigned long r; +uint64_t frand_max, r;assert (ddir_rw (ddir));
@@ -561,7 +560,7 @@ static unsigned int __get_next_buflen(struct thread_data *td, struct io_u *io_u,if (buflen < minbs) buflen = minbs; }else { -long perc =0 ; +long long perc =0 ;unsigned int i;for (i =0 ; i < td->o.bssplit_nr[ddir]; i++) {
@@ -569,7 +568,9 @@ static unsigned int __get_next_buflen(struct thread_data *td, struct io_u *io_u, buflen = bsp->bs; perc += bsp->perc; -if ((r *100UL <= frand_max * perc) && +if (!perc) +break ; +if ((r / perc <= frand_max /100ULL ) &&io_u_fits (td, io_u, buflen))break ; }
iolog.c +6 -4
@@ -714,7 +714,7 @@ static void flush_hist_samples(FILE *f, int hist_coarseness, void *samples,for (i =0 ; i < nr_samples; i++) { s =__get_sample (samples, log_offset, i); - entry = (struct io_u_plat_entry *) s->val; + entry = (struct io_u_plat_entry *) (uintptr_t ) s->val; io_u_plat = entry->io_u_plat; entry_before = flist_first_entry(&entry->list, struct io_u_plat_entry, list);
@@ -1153,7 +1153,8 @@ static int gz_work(struct iolog_flush_data *data) data->log->filename); do { if (c) - dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len); + dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, + (unsigned long) c->len); c = get_new_chunk(seq); stream.avail_out = GZ_CHUNK; stream.next_out = c->buf;
@@ -1190,7 +1191,7 @@ static int gz_work(struct iolog_flush_data *data) total -= c->len; c->len =GZ_CHUNK - stream.avail_out; total += c->len; -dprint (FD_COMPRESS ,"seq=%d, chunk=%lu\n" , seq, c->len); +dprint (FD_COMPRESS ,"seq=%d, chunk=%lu\n" , seq, (unsigned long ) c->len);if (ret !=Z_STREAM_END ) { do {
@@ -1201,7 +1202,8 @@ static int gz_work(struct iolog_flush_data *data) c->len =GZ_CHUNK - stream.avail_out; total += c->len;flist_add_tail (&c->list, &list); -dprint (FD_COMPRESS ,"seq=%d, chunk=%lu\n" , seq, c->len); +dprint (FD_COMPRESS ,"seq=%d, chunk=%lu\n" , seq, + (unsigned long ) c->len); }while (ret !=Z_STREAM_END ); }
os/os-mac.h +2 -0
@@ -35,7 +35,9 @@typedef off_t off64_t ; +#ifndef CONFIG_CLOCKID_T typedef unsigned int clockid_t ; +#endif #define FIO_OS_DIRECTIO static inline int fio_set_odirect (int fd)
os/windows/install.wxs +1 -1
@@ -10,7 +10,7 @@ <Product Id="*" Codepage="1252" Language="1033" Manufacturer="fio" Name="fio" - UpgradeCode="2338A332-5511-43CF-B9BD-5C60496CCFCC" Version="2.13"> + UpgradeCode="2338A332-5511-43CF-B9BD-5C60496CCFCC" Version="2.14"> <Package Description="Flexible IO Tester" InstallerVersion="301" Keywords="Installer,MSI,Database"
workqueue.c +3 -7
@@ -15,9 +15,8 @@ enum {SW_F_IDLE =1 <<0 ,SW_F_RUNNING =1 <<1 ,SW_F_EXIT =1 <<2 , -SW_F_EXITED =1 <<3 , -SW_F_ACCOUNTED =1 <<4 , - SW_F_ERROR = 1 << 5, +SW_F_ACCOUNTED =1 <<3 , + SW_F_ERROR = 1 << 4, }; static struct submit_worker *__get_submit_worker(struct workqueue *wq,
@@ -131,7 +130,7 @@ static void *worker_thread(void *data) {struct submit_worker *sw = data;struct workqueue *wq = sw->wq; -unsigned int eflags =0 , ret =0 ; +unsigned int ret =0 ;FLIST_HEAD (local_list);sk_out_assign (sw->sk_out);
@@ -206,9 +205,6 @@ handle_work: wq->ops.update_acct_fn (sw); done: -pthread_mutex_lock (&sw->lock); - sw->flags |= (SW_F_EXITED | eflags); -pthread_mutex_unlock (&sw->lock);sk_out_drop ();return NULL ; }