client/server: few select speedups

Don't alloc/free when we can reuse, and don't calculate string
lengths twice.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/server.c b/server.c
index 5afd8d4..cf3a48e 100644
--- a/server.c
+++ b/server.c
@@ -208,8 +208,8 @@
 int fio_net_send_cmd(int fd, uint16_t opcode, const void *buf, off_t size,
 		     uint64_t tag)
 {
-	struct fio_net_cmd *cmd;
-	size_t this_len;
+	struct fio_net_cmd *cmd = NULL;
+	size_t this_len, cur_len = 0;
 	int ret;
 
 	do {
@@ -217,7 +217,13 @@
 		if (this_len > FIO_SERVER_MAX_PDU)
 			this_len = FIO_SERVER_MAX_PDU;
 
-		cmd = malloc(sizeof(*cmd) + this_len);
+		if (!cmd || cur_len < sizeof(*cmd) + this_len) {
+			if (cmd)
+				free(cmd);
+
+			cur_len = sizeof(*cmd) + this_len;
+			cmd = malloc(cur_len);
+		}
 
 		fio_init_net_cmd(cmd, opcode, buf, this_len, tag);
 
@@ -227,11 +233,13 @@
 		fio_net_cmd_crc(cmd);
 
 		ret = fio_send_data(fd, cmd, sizeof(*cmd) + this_len);
-		free(cmd);
 		size -= this_len;
 		buf += this_len;
 	} while (!ret && size);
 
+	if (cmd)
+		free(cmd);
+
 	return ret;
 }
 
@@ -332,13 +340,11 @@
 {
 	struct jobs_eta *je;
 	size_t size;
-	void *buf;
 	int i;
 
 	size = sizeof(*je) + thread_number * sizeof(char);
-	buf = malloc(size);
-	memset(buf, 0, size);
-	je = buf;
+	je = malloc(size);
+	memset(je, 0, size);
 
 	if (!calc_thread_status(je, 1)) {
 		free(je);
@@ -364,7 +370,7 @@
 	je->elapsed_sec		= cpu_to_le32(je->nr_running);
 	je->eta_sec		= cpu_to_le64(je->eta_sec);
 
-	fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, buf, size, cmd->tag);
+	fio_net_send_cmd(server_fd, FIO_NET_CMD_ETA, je, size, cmd->tag);
 	free(je);
 	return 0;
 }
@@ -373,7 +379,7 @@
 {
 	int ret;
 
-	dprint(FD_NET, "server: got opcode %d\n", cmd->opcode);
+	dprint(FD_NET, "server: got opcode %d, pdu=%u\n", cmd->opcode, cmd->pdu_len);
 
 	switch (cmd->opcode) {
 	case FIO_NET_CMD_QUIT: