projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server: make job/connection lists private
[fio.git]
/
server.c
diff --git
a/server.c
b/server.c
index 884ff8ef5d8c597ec6d9f674ff6b495bdd876d92..832454305d1f5f65e01fedfd13bc1785caad3282 100644
(file)
--- a/
server.c
+++ b/
server.c
@@
-51,12
+51,6
@@
struct fio_fork_item {
pid_t pid;
};
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",
static const char *fio_server_ops[FIO_NET_CMD_NR] = {
"",
"QUIT",
@@
-471,16
+465,16
@@
static void fio_server_add_fork_item(pid_t pid, struct flist_head *list)
flist_add_tail(&ffi->list, list);
}
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)
}
static void fio_server_check_fork_item(struct fio_fork_item *ffi)
@@
-490,7
+484,7
@@
static void fio_server_check_fork_item(struct fio_fork_item *ffi)
ret = waitpid(ffi->pid, &status, WNOHANG);
if (ret < 0) {
if (errno == ECHILD) {
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));
ffi->exited = 1;
} else
log_err("fio: waitpid: %s\n", strerror(errno));
@@
-509,7
+503,7
@@
static void fio_server_check_fork_item(struct fio_fork_item *ffi)
static void fio_server_fork_item_done(struct fio_fork_item *ffi)
{
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...
/*
* Fold STOP and QUIT...
@@
-535,17
+529,17
@@
static void fio_server_check_fork_items(struct flist_head *list)
}
}
}
}
-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 f
list_head *job_list, struct f
io_net_cmd *cmd)
{
pid_t pid;
int ret;
{
pid_t pid;
int ret;
@@
-554,7
+548,7
@@
static int handle_run_cmd(struct fio_net_cmd *cmd)
pid = fork();
if (pid) {
pid = fork();
if (pid) {
- fio_server_add_job_pid(pid);
+ fio_server_add_job_pid(
job_list,
pid);
return 0;
}
return 0;
}
@@
-681,6
+675,7
@@
static int handle_send_eta_cmd(struct fio_net_cmd *cmd)
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_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++) {
je->files_open = cpu_to_le32(je->files_open);
for (i = 0; i < DDIR_RWDIR_CNT; i++) {
@@
-733,7
+728,7
@@
static int handle_update_job_cmd(struct fio_net_cmd *cmd)
return 0;
}
return 0;
}
-static int handle_command(struct fio_net_cmd *cmd)
+static int handle_command(struct f
list_head *job_list, struct f
io_net_cmd *cmd)
{
int ret;
{
int ret;
@@
-761,7
+756,7
@@
static int handle_command(struct fio_net_cmd *cmd)
ret = handle_send_eta_cmd(cmd);
break;
case FIO_NET_CMD_RUN:
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);
break;
case FIO_NET_CMD_UPDATE_JOB:
ret = handle_update_job_cmd(cmd);
@@
-777,10
+772,10
@@
static int handle_command(struct fio_net_cmd *cmd)
static int handle_connection(int sk)
{
struct fio_net_cmd *cmd = NULL;
static int handle_connection(int sk)
{
struct fio_net_cmd *cmd = NULL;
+ FLIST_HEAD(job_list);
int ret = 0;
reset_fio_state();
int ret = 0;
reset_fio_state();
- INIT_FLIST_HEAD(&job_list);
server_fd = sk;
/* read forever */
server_fd = sk;
/* read forever */
@@
-804,7
+799,7
@@
static int handle_connection(int sk)
log_err("fio: poll: %s\n", strerror(errno));
break;
} else if (!ret) {
log_err("fio: poll: %s\n", strerror(errno));
break;
} else if (!ret) {
- fio_server_check_jobs();
+ fio_server_check_jobs(
&job_list
);
continue;
}
continue;
}
@@
-816,7
+811,7
@@
static int handle_connection(int sk)
}
} while (!exit_backend);
}
} while (!exit_backend);
- fio_server_check_jobs();
+ fio_server_check_jobs(
&job_list
);
if (ret < 0)
break;
if (ret < 0)
break;
@@
-827,7
+822,7
@@
static int handle_connection(int sk)
break;
}
break;
}
- ret = handle_command(cmd);
+ ret = handle_command(
&job_list,
cmd);
if (ret)
break;
if (ret)
break;
@@
-848,6
+843,7
@@
static int accept_loop(int listen_sk)
socklen_t len = sizeof(addr);
struct pollfd pfd;
int ret = 0, sk, flags, exitval = 0;
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");
dprint(FD_NET, "server enter accept loop\n");
@@
-873,7
+869,7
@@
static int accept_loop(int listen_sk)
log_err("fio: poll: %s\n", strerror(errno));
break;
} else if (!ret) {
log_err("fio: poll: %s\n", strerror(errno));
break;
} else if (!ret) {
- fio_server_check_conns();
+ fio_server_check_conns(
&conn_list
);
continue;
}
continue;
}
@@
-881,7
+877,7
@@
static int accept_loop(int listen_sk)
break;
} while (!exit_backend);
break;
} while (!exit_backend);
- fio_server_check_conns();
+ fio_server_check_conns(
&conn_list
);
if (exit_backend || ret < 0)
break;
if (exit_backend || ret < 0)
break;
@@
-897,7
+893,7
@@
static int accept_loop(int listen_sk)
pid = fork();
if (pid) {
close(sk);
pid = fork();
if (pid) {
close(sk);
- fio_server_add_conn_pid(pid);
+ fio_server_add_conn_pid(
&conn_list,
pid);
continue;
}
continue;
}
@@
-1466,7
+1462,7
@@
int fio_server_parse_string(const char *str, char **ptr, int *is_sock,
host++;
lport = atoi(host);
if (!lport || lport > 65535) {
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",
l
port);
return 1;
}
/* no hostname given, we are done */
return 1;
}
/* no hostname given, we are done */
@@
-1484,7
+1480,7
@@
int fio_server_parse_string(const char *str, char **ptr, int *is_sock,
portp++;
lport = atoi(portp);
if (!lport || lport > 65535) {
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",
l
port);
return 1;
}
}
return 1;
}
}