allow --client to work with shared filesystem
[fio.git] / server.c
index a8d4868fa1f30e75d2d4e42a6b2f1eeba9ee0c8d..7a9b0a447d306b0e1be0928d2635c4e19a14b96a 100644 (file)
--- a/server.c
+++ b/server.c
@@ -333,7 +333,7 @@ static uint64_t alloc_reply(uint64_t tag, uint16_t opcode)
 
        reply = calloc(1, sizeof(*reply));
        INIT_FLIST_HEAD(&reply->list);
-       gettimeofday(&reply->tv, NULL);
+       fio_gettime(&reply->tv, NULL);
        reply->saved_tag = tag;
        reply->opcode = opcode;
 
@@ -1007,6 +1007,7 @@ static int accept_loop(int listen_sk)
                }
 
                /* exits */
+               strncpy(client_sockaddr_str, from, INET6_ADDRSTRLEN);
                handle_connection(sk);
        }
 
@@ -1158,6 +1159,10 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs)
        p.ts.latency_window     = cpu_to_le64(ts->latency_window);
        p.ts.latency_percentile.u.i = cpu_to_le64(fio_double_to_uint64(ts->latency_percentile.u.f));
 
+       p.ts.nr_block_infos     = le64_to_cpu(ts->nr_block_infos);
+       for (i = 0; i < p.ts.nr_block_infos; i++)
+               p.ts.block_infos[i] = le32_to_cpu(ts->block_infos[i]);
+
        convert_gs(&p.rs, rs);
 
        fio_net_send_cmd(server_fd, FIO_NET_CMD_TS, &p, sizeof(p), NULL, NULL);
@@ -1178,14 +1183,14 @@ static void convert_agg(struct disk_util_agg *dst, struct disk_util_agg *src)
        int i;
 
        for (i = 0; i < 2; i++) {
-               dst->ios[i]     = cpu_to_le32(src->ios[i]);
-               dst->merges[i]  = cpu_to_le32(src->merges[i]);
+               dst->ios[i]     = cpu_to_le64(src->ios[i]);
+               dst->merges[i]  = cpu_to_le64(src->merges[i]);
                dst->sectors[i] = cpu_to_le64(src->sectors[i]);
-               dst->ticks[i]   = cpu_to_le32(src->ticks[i]);
+               dst->ticks[i]   = cpu_to_le64(src->ticks[i]);
        }
 
-       dst->io_ticks           = cpu_to_le32(src->io_ticks);
-       dst->time_in_queue      = cpu_to_le32(src->time_in_queue);
+       dst->io_ticks           = cpu_to_le64(src->io_ticks);
+       dst->time_in_queue      = cpu_to_le64(src->time_in_queue);
        dst->slavecount         = cpu_to_le32(src->slavecount);
        dst->max_util.u.i       = cpu_to_le64(fio_double_to_uint64(src->max_util.u.f));
 }
@@ -1198,14 +1203,14 @@ static void convert_dus(struct disk_util_stat *dst, struct disk_util_stat *src)
        strncpy((char *) dst->name, (char *) src->name, FIO_DU_NAME_SZ - 1);
 
        for (i = 0; i < 2; i++) {
-               dst->s.ios[i]           = cpu_to_le32(src->s.ios[i]);
-               dst->s.merges[i]        = cpu_to_le32(src->s.merges[i]);
+               dst->s.ios[i]           = cpu_to_le64(src->s.ios[i]);
+               dst->s.merges[i]        = cpu_to_le64(src->s.merges[i]);
                dst->s.sectors[i]       = cpu_to_le64(src->s.sectors[i]);
-               dst->s.ticks[i]         = cpu_to_le32(src->s.ticks[i]);
+               dst->s.ticks[i]         = cpu_to_le64(src->s.ticks[i]);
        }
 
-       dst->s.io_ticks         = cpu_to_le32(src->s.io_ticks);
-       dst->s.time_in_queue    = cpu_to_le32(src->s.time_in_queue);
+       dst->s.io_ticks         = cpu_to_le64(src->s.io_ticks);
+       dst->s.time_in_queue    = cpu_to_le64(src->s.time_in_queue);
        dst->s.msec             = cpu_to_le64(src->s.msec);
 }
 
@@ -1391,7 +1396,8 @@ int fio_server_get_verify_state(const char *name, int threadnumber,
        rep->data = NULL;
        rep->error = 0;
 
-       verify_state_gen_name((char *) out.path, name, me, threadnumber);
+       verify_state_gen_name((char *) out.path, sizeof(out.path), name, me,
+                               threadnumber);
        tag = (uint64_t) (uintptr_t) rep;
        fio_net_send_cmd(server_fd, FIO_NET_CMD_SENDFILE, &out, sizeof(out),
                                &tag, NULL);
@@ -1430,6 +1436,7 @@ fail:
        *datap = data;
 
        sfree(rep->data);
+       __fio_mutex_remove(&rep->lock);
        sfree(rep);
        return 0;
 }