io_u: wrap to beginning when end-of-file is reached for time_based
[fio.git] / server.c
index 8b36e3837f9dc0a17e5a29b567a48e46c8bbb951..e6ea4cdbfdcabc911a97f0e96d1e99e92b8c520b 100644 (file)
--- a/server.c
+++ b/server.c
@@ -252,9 +252,10 @@ static int fio_send_data(int sk, const void *p, unsigned int len)
        return fio_sendv_data(sk, &iov, 1);
 }
 
-static int fio_recv_data(int sk, void *p, unsigned int len, bool wait)
+static int fio_recv_data(int sk, void *buf, unsigned int len, bool wait)
 {
        int flags;
+       char *p = buf;
 
        if (wait)
                flags = MSG_WAITALL;
@@ -377,7 +378,7 @@ struct fio_net_cmd *fio_net_recv_cmd(int sk, bool wait)
                        break;
 
                /* There's payload, get it */
-               pdu = (void *) cmdret->payload + pdu_offset;
+               pdu = (char *) cmdret->payload + pdu_offset;
                ret = fio_recv_data(sk, pdu, cmd.pdu_len, wait);
                if (ret)
                        break;
@@ -855,7 +856,7 @@ static int handle_probe_cmd(struct fio_net_cmd *cmd)
 #ifdef CONFIG_BIG_ENDIAN
        probe.bigendian = 1;
 #endif
-       strncpy((char *) probe.fio_version, fio_version_string, sizeof(probe.fio_version));
+       strncpy((char *) probe.fio_version, fio_version_string, sizeof(probe.fio_version) - 1);
 
        probe.os        = FIO_OS;
        probe.arch      = FIO_ARCH;
@@ -969,6 +970,7 @@ static int handle_trigger_cmd(struct fio_net_cmd *cmd)
        } else
                fio_net_queue_cmd(FIO_NET_CMD_VTRIGGER, rep, sz, NULL, SK_F_FREE | SK_F_INLINE);
 
+       fio_terminate_threads(TERMINATE_ALL);
        exec_trigger(buf);
        return 0;
 }
@@ -1474,6 +1476,7 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs)
                convert_io_stat(&p.ts.slat_stat[i], &ts->slat_stat[i]);
                convert_io_stat(&p.ts.lat_stat[i], &ts->lat_stat[i]);
                convert_io_stat(&p.ts.bw_stat[i], &ts->bw_stat[i]);
+               convert_io_stat(&p.ts.iops_stat[i], &ts->iops_stat[i]);
        }
 
        p.ts.usr_time           = cpu_to_le64(ts->usr_time);
@@ -1481,7 +1484,8 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs)
        p.ts.ctx                = cpu_to_le64(ts->ctx);
        p.ts.minf               = cpu_to_le64(ts->minf);
        p.ts.majf               = cpu_to_le64(ts->majf);
-       p.ts.clat_percentiles   = cpu_to_le64(ts->clat_percentiles);
+       p.ts.clat_percentiles   = cpu_to_le32(ts->clat_percentiles);
+       p.ts.lat_percentiles    = cpu_to_le32(ts->lat_percentiles);
        p.ts.percentile_precision = cpu_to_le64(ts->percentile_precision);
 
        for (i = 0; i < FIO_IO_U_LIST_MAX_LEN; i++) {