X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=server.c;h=90c52e01ac231f4972bbd94e91361d3fe61ad132;hb=a71ad043a3f4ad405911841e1fe5bb09823e3be2;hp=a5af5e74326b8b7385a35edd98665eabe93b83d2;hpb=6447b4c297fefce060f6f3c44f7a5c34a869eaa3;p=fio.git diff --git a/server.c b/server.c index a5af5e74..90c52e01 100644 --- a/server.c +++ b/server.c @@ -409,8 +409,9 @@ struct fio_net_cmd *fio_net_recv_cmd(int sk, bool wait) if (cmdret->opcode == FIO_NET_CMD_TEXT) { struct cmd_text_pdu *__pdu = (struct cmd_text_pdu *) cmdret->payload; char *buf = (char *) __pdu->buf; + int len = le32_to_cpu(__pdu->buf_len); - buf[__pdu->buf_len] = '\0'; + buf[len] = '\0'; } else if (cmdret->opcode == FIO_NET_CMD_JOB) { struct cmd_job_pdu *__pdu = (struct cmd_job_pdu *) cmdret->payload; char *buf = (char *) __pdu->buf; @@ -950,7 +951,7 @@ static int handle_update_job_cmd(struct fio_net_cmd *cmd) return 0; } - td = &threads[tnumber - 1]; + td = tnumber_to_td(tnumber); convert_thread_options_to_cpu(&td->o, &pdu->top); send_update_job_reply(cmd->tag, 0); return 0; @@ -1463,7 +1464,7 @@ static void convert_gs(struct group_run_stats *dst, struct group_run_stats *src) void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) { struct cmd_ts_pdu p; - int i, j; + int i, j, k; void *ss_buf; uint64_t *ss_iops, *ss_bw; @@ -1499,6 +1500,7 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) p.ts.majf = cpu_to_le64(ts->majf); p.ts.clat_percentiles = cpu_to_le32(ts->clat_percentiles); p.ts.lat_percentiles = cpu_to_le32(ts->lat_percentiles); + p.ts.slat_percentiles = cpu_to_le32(ts->slat_percentiles); p.ts.percentile_precision = cpu_to_le64(ts->percentile_precision); for (i = 0; i < FIO_IO_U_LIST_MAX_LEN; i++) { @@ -1521,9 +1523,10 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) for (i = 0; i < FIO_IO_U_LAT_M_NR; i++) p.ts.io_u_lat_m[i] = cpu_to_le64(ts->io_u_lat_m[i]); - for (i = 0; i < DDIR_RWDIR_CNT; i++) - for (j = 0; j < FIO_IO_U_PLAT_NR; j++) - p.ts.io_u_plat[i][j] = cpu_to_le64(ts->io_u_plat[i][j]); + for (i = 0; i < FIO_LAT_CNT; i++) + for (j = 0; j < DDIR_RWDIR_CNT; j++) + for (k = 0; k < FIO_IO_U_PLAT_NR; k++) + p.ts.io_u_plat[i][j][k] = cpu_to_le64(ts->io_u_plat[i][j][k]); for (j = 0; j < FIO_IO_U_PLAT_NR; j++) p.ts.io_u_sync_plat[j] = cpu_to_le64(ts->io_u_sync_plat[j]); @@ -1577,10 +1580,10 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) for (i = 0; i < DDIR_RWDIR_CNT; i++) { for (j = 0; j < FIO_IO_U_PLAT_NR; j++) { p.ts.io_u_plat_high_prio[i][j] = cpu_to_le64(ts->io_u_plat_high_prio[i][j]); - p.ts.io_u_plat_prio[i][j] = cpu_to_le64(ts->io_u_plat_prio[i][j]); + p.ts.io_u_plat_low_prio[i][j] = cpu_to_le64(ts->io_u_plat_low_prio[i][j]); } convert_io_stat(&p.ts.clat_high_prio_stat[i], &ts->clat_high_prio_stat[i]); - convert_io_stat(&p.ts.clat_prio_stat[i], &ts->clat_prio_stat[i]); + convert_io_stat(&p.ts.clat_low_prio_stat[i], &ts->clat_low_prio_stat[i]); } convert_gs(&p.rs, rs); @@ -1907,7 +1910,7 @@ static int fio_append_iolog_gz(struct sk_entry *first, struct io_log *log) break; } flist_add_tail(&entry->list, &first->next); - } while (ret != Z_STREAM_END); + } ret = deflateEnd(&stream); if (ret == Z_OK) @@ -2454,6 +2457,11 @@ static void set_sig_handlers(void) }; sigaction(SIGINT, &act, NULL); + + /* Windows uses SIGBREAK as a quit signal from other applications */ +#ifdef WIN32 + sigaction(SIGBREAK, &act, NULL); +#endif } void fio_server_destroy_sk_key(void) @@ -2562,6 +2570,7 @@ static int write_pid(pid_t pid, const char *pidfile) */ int fio_start_server(char *pidfile) { + FILE *file; pid_t pid; int ret; @@ -2594,14 +2603,28 @@ int fio_start_server(char *pidfile) setsid(); openlog("fio", LOG_NDELAY|LOG_NOWAIT|LOG_PID, LOG_USER); log_syslog = true; - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); + + file = freopen("/dev/null", "r", stdin); + if (!file) + perror("freopen"); + + file = freopen("/dev/null", "w", stdout); + if (!file) + perror("freopen"); + + file = freopen("/dev/null", "w", stderr); + if (!file) + perror("freopen"); + f_out = NULL; f_err = NULL; ret = fio_server(); + fclose(stdin); + fclose(stdout); + fclose(stderr); + closelog(); unlink(pidfile); free(pidfile);