X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=server.c;h=23e549a590a709e4072b4de33704a32b46f3dd73;hp=ebb97dc717d302c46ff49957d3d5a441050743fe;hb=379e5f09a16f789f3d15ff5541a42e1e74d2b383;hpb=ec2ea18e87fad6c42d6875cd4ee1bb25ef9b4627 diff --git a/server.c b/server.c index ebb97dc7..23e549a5 100644 --- a/server.c +++ b/server.c @@ -28,7 +28,7 @@ int fio_net_port = FIO_NET_PORT; -int exit_backend = 0; +bool exit_backend = false; enum { SK_F_FREE = 1, @@ -296,6 +296,8 @@ static int verify_convert_cmd(struct fio_net_cmd *cmd) if (crc != cmd->cmd_crc16) { log_err("fio: server bad crc on command (got %x, wanted %x)\n", cmd->cmd_crc16, crc); + fprintf(f_err, "fio: server bad crc on command (got %x, wanted %x)\n", + cmd->cmd_crc16, crc); return 1; } @@ -310,6 +312,8 @@ static int verify_convert_cmd(struct fio_net_cmd *cmd) break; default: log_err("fio: bad server cmd version %d\n", cmd->version); + fprintf(f_err, "fio: client/server version mismatch (%d != %d)\n", + cmd->version, FIO_SERVER_VER); return 1; } @@ -991,7 +995,7 @@ static int handle_command(struct sk_out *sk_out, struct flist_head *job_list, ret = 0; break; case FIO_NET_CMD_EXIT: - exit_backend = 1; + exit_backend = true; return -1; case FIO_NET_CMD_LOAD_FILE: ret = handle_load_file_cmd(cmd); @@ -1199,7 +1203,6 @@ static int handle_connection(struct sk_out *sk_out) .events = POLLIN, }; - ret = 0; do { int timeout = 1000; @@ -1359,7 +1362,7 @@ static int accept_loop(int listen_sk) dprint(FD_NET, "server: connect from %s\n", from); - sk_out = smalloc(sizeof(*sk_out)); + sk_out = scalloc(1, sizeof(*sk_out)); if (!sk_out) { close(sk); return -1; @@ -1467,9 +1470,12 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) memset(&p, 0, sizeof(p)); - strncpy(p.ts.name, ts->name, FIO_JOBNAME_SIZE - 1); - strncpy(p.ts.verror, ts->verror, FIO_VERROR_SIZE - 1); - strncpy(p.ts.description, ts->description, FIO_JOBDESC_SIZE - 1); + strncpy(p.ts.name, ts->name, FIO_JOBNAME_SIZE); + p.ts.name[FIO_JOBNAME_SIZE - 1] = '\0'; + strncpy(p.ts.verror, ts->verror, FIO_VERROR_SIZE); + p.ts.verror[FIO_VERROR_SIZE - 1] = '\0'; + strncpy(p.ts.description, ts->description, FIO_JOBDESC_SIZE); + p.ts.description[FIO_JOBDESC_SIZE - 1] = '\0'; p.ts.error = cpu_to_le32(ts->error); p.ts.thread_number = cpu_to_le32(ts->thread_number); @@ -1527,6 +1533,7 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) p.ts.total_submit = cpu_to_le64(ts->total_submit); p.ts.total_complete = cpu_to_le64(ts->total_complete); + p.ts.nr_zone_resets = cpu_to_le64(ts->nr_zone_resets); for (i = 0; i < DDIR_RWDIR_CNT; i++) { p.ts.io_bytes[i] = cpu_to_le64(ts->io_bytes[i]); @@ -1559,6 +1566,9 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) p.ts.ss_deviation.u.i = cpu_to_le64(fio_double_to_uint64(ts->ss_deviation.u.f)); p.ts.ss_criterion.u.i = cpu_to_le64(fio_double_to_uint64(ts->ss_criterion.u.f)); + p.ts.cachehit = cpu_to_le64(ts->cachehit); + p.ts.cachemiss = cpu_to_le64(ts->cachemiss); + convert_gs(&p.rs, rs); dprint(FD_NET, "ts->ss_state = %d\n", ts->ss_state); @@ -1595,7 +1605,7 @@ void fio_server_send_gs(struct group_run_stats *rs) } void fio_server_send_job_options(struct flist_head *opt_list, - unsigned int groupid) + unsigned int gid) { struct cmd_job_option pdu; struct flist_head *entry; @@ -1610,12 +1620,12 @@ void fio_server_send_job_options(struct flist_head *opt_list, p = flist_entry(entry, struct print_option, list); memset(&pdu, 0, sizeof(pdu)); - if (groupid == -1U) { + if (gid == -1U) { pdu.global = __cpu_to_le16(1); pdu.groupid = 0; } else { pdu.global = 0; - pdu.groupid = cpu_to_le32(groupid); + pdu.groupid = cpu_to_le32(gid); } len = strlen(p->name); if (len >= sizeof(pdu.name)) { @@ -1701,8 +1711,8 @@ static inline void __fio_net_prep_tail(z_stream *stream, void *out_pdu, *last_entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, out_pdu, this_len, NULL, SK_F_VEC | SK_F_INLINE | SK_F_FREE); - flist_add_tail(&(*last_entry)->list, &first->next); - + if (*last_entry) + flist_add_tail(&(*last_entry)->list, &first->next); } /* @@ -1718,9 +1728,10 @@ static int __deflate_pdu_buffer(void *next_in, unsigned int next_sz, void **out_ stream->next_in = next_in; stream->avail_in = next_sz; do { - if (! stream->avail_out) { - + if (!stream->avail_out) { __fio_net_prep_tail(stream, *out_pdu, last_entry, first); + if (*last_entry == NULL) + return 1; *out_pdu = malloc(FIO_SERVER_MAX_FRAGMENT_PDU); @@ -1784,8 +1795,7 @@ static int __fio_append_iolog_gz_hist(struct sk_entry *first, struct io_log *log } __fio_net_prep_tail(stream, out_pdu, &entry, first); - - return 0; + return entry == NULL; } static int __fio_append_iolog_gz(struct sk_entry *first, struct io_log *log, @@ -1824,6 +1834,10 @@ static int __fio_append_iolog_gz(struct sk_entry *first, struct io_log *log, entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, out_pdu, this_len, NULL, SK_F_VEC | SK_F_INLINE | SK_F_FREE); + if (!entry) { + free(out_pdu); + return 1; + } flist_add_tail(&entry->list, &first->next); } while (stream->avail_in); @@ -1875,6 +1889,10 @@ static int fio_append_iolog_gz(struct sk_entry *first, struct io_log *log) entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, out_pdu, this_len, NULL, SK_F_VEC | SK_F_INLINE | SK_F_FREE); + if (!entry) { + free(out_pdu); + break; + } flist_add_tail(&entry->list, &first->next); } while (ret != Z_STREAM_END); @@ -1895,6 +1913,7 @@ static int fio_append_gz_chunks(struct sk_entry *first, struct io_log *log) { struct sk_entry *entry; struct flist_head *node; + int ret = 0; pthread_mutex_lock(&log->chunk_lock); flist_for_each(node, &log->chunk_list) { @@ -1903,16 +1922,20 @@ static int fio_append_gz_chunks(struct sk_entry *first, struct io_log *log) c = flist_entry(node, struct iolog_compress, list); entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, c->buf, c->len, NULL, SK_F_VEC | SK_F_INLINE); + if (!entry) { + ret = 1; + break; + } flist_add_tail(&entry->list, &first->next); } pthread_mutex_unlock(&log->chunk_lock); - - return 0; + return ret; } static int fio_append_text_log(struct sk_entry *first, struct io_log *log) { struct sk_entry *entry; + int ret = 0; while (!flist_empty(&log->io_logs)) { struct io_logs *cur_log; @@ -1925,10 +1948,14 @@ static int fio_append_text_log(struct sk_entry *first, struct io_log *log) entry = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, cur_log->log, size, NULL, SK_F_VEC | SK_F_INLINE); + if (!entry) { + ret = 1; + break; + } flist_add_tail(&entry->list, &first->next); } - return 0; + return ret; } int fio_send_iolog(struct thread_data *td, struct io_log *log, const char *name) @@ -1969,7 +1996,7 @@ int fio_send_iolog(struct thread_data *td, struct io_log *log, const char *name) s->time = cpu_to_le64(s->time); s->data.val = cpu_to_le64(s->data.val); s->__ddir = cpu_to_le32(s->__ddir); - s->bs = cpu_to_le32(s->bs); + s->bs = cpu_to_le64(s->bs); if (log->log_offset) { struct io_sample_offset *so = (void *) s; @@ -1983,6 +2010,8 @@ int fio_send_iolog(struct thread_data *td, struct io_log *log, const char *name) * Assemble header entry first */ first = fio_net_prep_cmd(FIO_NET_CMD_IOLOG, &pdu, sizeof(pdu), NULL, SK_F_VEC | SK_F_INLINE | SK_F_COPY); + if (!first) + return 1; /* * Now append actual log entries. If log compression was enabled on @@ -2126,14 +2155,14 @@ static int fio_init_server_ip(void) #endif if (use_ipv6) { - const void *src = &saddr_in6.sin6_addr; + void *src = &saddr_in6.sin6_addr; addr = (struct sockaddr *) &saddr_in6; socklen = sizeof(saddr_in6); saddr_in6.sin6_family = AF_INET6; str = inet_ntop(AF_INET6, src, buf, sizeof(buf)); } else { - const void *src = &saddr_in.sin_addr; + void *src = &saddr_in.sin_addr; addr = (struct sockaddr *) &saddr_in; socklen = sizeof(saddr_in); @@ -2201,7 +2230,7 @@ static int fio_init_server_connection(void) if (!bind_sock) { char *p, port[16]; - const void *src; + void *src; int af; if (use_ipv6) { @@ -2470,7 +2499,7 @@ void fio_server_got_signal(int signal) sk_out->sk = -1; else { log_info("\nfio: terminating on signal %d\n", signal); - exit_backend = 1; + exit_backend = true; } } @@ -2552,7 +2581,7 @@ int fio_start_server(char *pidfile) setsid(); openlog("fio", LOG_NDELAY|LOG_NOWAIT|LOG_PID, LOG_USER); - log_syslog = 1; + log_syslog = true; close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO);