pid_t pid;
};
-/* Created on fork on new connection */
-static FLIST_HEAD(conn_list);
-
-/* Created on job fork from connection */
-static FLIST_HEAD(job_list);
-
static const char *fio_server_ops[FIO_NET_CMD_NR] = {
"",
"QUIT",
flist_add_tail(&ffi->list, list);
}
-static void fio_server_add_conn_pid(pid_t pid)
+static void fio_server_add_conn_pid(struct flist_head *conn_list, pid_t pid)
{
- dprint(FD_NET, "server: forked off connection job (pid=%u)\n", pid);
- fio_server_add_fork_item(pid, &conn_list);
+ dprint(FD_NET, "server: forked off connection job (pid=%u)\n", (int) pid);
+ fio_server_add_fork_item(pid, conn_list);
}
-static void fio_server_add_job_pid(pid_t pid)
+static void fio_server_add_job_pid(struct flist_head *job_list, pid_t pid)
{
- dprint(FD_NET, "server: forked off job job (pid=%u)\n", pid);
- fio_server_add_fork_item(pid, &job_list);
+ dprint(FD_NET, "server: forked off job job (pid=%u)\n", (int) pid);
+ fio_server_add_fork_item(pid, job_list);
}
static void fio_server_check_fork_item(struct fio_fork_item *ffi)
ret = waitpid(ffi->pid, &status, WNOHANG);
if (ret < 0) {
if (errno == ECHILD) {
- log_err("fio: connection pid %u disappeared\n", ffi->pid);
+ log_err("fio: connection pid %u disappeared\n", (int) ffi->pid);
ffi->exited = 1;
} else
log_err("fio: waitpid: %s\n", strerror(errno));
static void fio_server_fork_item_done(struct fio_fork_item *ffi)
{
- dprint(FD_NET, "pid %u exited, sig=%u, exitval=%d\n", ffi->pid, ffi->signal, ffi->exitval);
+ dprint(FD_NET, "pid %u exited, sig=%u, exitval=%d\n", (int) ffi->pid, ffi->signal, ffi->exitval);
/*
* Fold STOP and QUIT...
}
}
-static void fio_server_check_jobs(void)
+static void fio_server_check_jobs(struct flist_head *job_list)
{
- fio_server_check_fork_items(&job_list);
+ fio_server_check_fork_items(job_list);
}
-static void fio_server_check_conns(void)
+static void fio_server_check_conns(struct flist_head *conn_list)
{
- fio_server_check_fork_items(&conn_list);
+ fio_server_check_fork_items(conn_list);
}
-static int handle_run_cmd(struct fio_net_cmd *cmd)
+static int handle_run_cmd(struct flist_head *job_list, struct fio_net_cmd *cmd)
{
pid_t pid;
int ret;
pid = fork();
if (pid) {
- fio_server_add_job_pid(pid);
+ fio_server_add_job_pid(job_list, pid);
return 0;
}
je->nr_running = cpu_to_le32(je->nr_running);
je->nr_ramp = cpu_to_le32(je->nr_ramp);
je->nr_pending = cpu_to_le32(je->nr_pending);
+ je->nr_setting_up = cpu_to_le32(je->nr_setting_up);
je->files_open = cpu_to_le32(je->files_open);
for (i = 0; i < DDIR_RWDIR_CNT; i++) {
return 0;
}
-static int handle_command(struct fio_net_cmd *cmd)
+static int handle_command(struct flist_head *job_list, struct fio_net_cmd *cmd)
{
int ret;
ret = handle_send_eta_cmd(cmd);
break;
case FIO_NET_CMD_RUN:
- ret = handle_run_cmd(cmd);
+ ret = handle_run_cmd(job_list, cmd);
break;
case FIO_NET_CMD_UPDATE_JOB:
ret = handle_update_job_cmd(cmd);
static int handle_connection(int sk)
{
struct fio_net_cmd *cmd = NULL;
+ FLIST_HEAD(job_list);
int ret = 0;
reset_fio_state();
- INIT_FLIST_HEAD(&job_list);
server_fd = sk;
/* read forever */
log_err("fio: poll: %s\n", strerror(errno));
break;
} else if (!ret) {
- fio_server_check_jobs();
+ fio_server_check_jobs(&job_list);
continue;
}
}
} while (!exit_backend);
- fio_server_check_jobs();
+ fio_server_check_jobs(&job_list);
if (ret < 0)
break;
break;
}
- ret = handle_command(cmd);
+ ret = handle_command(&job_list, cmd);
if (ret)
break;
socklen_t len = sizeof(addr);
struct pollfd pfd;
int ret = 0, sk, flags, exitval = 0;
+ FLIST_HEAD(conn_list);
dprint(FD_NET, "server enter accept loop\n");
log_err("fio: poll: %s\n", strerror(errno));
break;
} else if (!ret) {
- fio_server_check_conns();
+ fio_server_check_conns(&conn_list);
continue;
}
break;
} while (!exit_backend);
- fio_server_check_conns();
+ fio_server_check_conns(&conn_list);
if (exit_backend || ret < 0)
break;
pid = fork();
if (pid) {
close(sk);
- fio_server_add_conn_pid(pid);
+ fio_server_add_conn_pid(&conn_list, pid);
continue;
}
p.ts.kb_base = cpu_to_le32(ts->kb_base);
p.ts.unit_base = cpu_to_le32(ts->unit_base);
+ p.ts.latency_depth = cpu_to_le32(ts->latency_depth);
+ p.ts.latency_target = cpu_to_le64(ts->latency_target);
+ 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));
+
convert_gs(&p.rs, rs);
fio_net_send_cmd(server_fd, FIO_NET_CMD_TS, &p, sizeof(p), NULL, NULL);
host++;
lport = atoi(host);
if (!lport || lport > 65535) {
- log_err("fio: bad server port %u\n", port);
+ log_err("fio: bad server port %u\n", lport);
return 1;
}
/* no hostname given, we are done */
portp++;
lport = atoi(portp);
if (!lport || lport > 65535) {
- log_err("fio: bad server port %u\n", port);
+ log_err("fio: bad server port %u\n", lport);
return 1;
}
}