Lines Matching refs:td
40 struct thread_data *td; member
228 static int set_window_size(struct thread_data *td, int fd) in set_window_size() argument
231 struct netio_options *o = td->eo; in set_window_size()
247 td_verror(td, errno, "rcvbuf window size"); in set_window_size()
253 td_verror(td, errno, "sndbuf window size"); in set_window_size()
258 td_verror(td, -EINVAL, "setsockopt window size"); in set_window_size()
263 static int set_mss(struct thread_data *td, int fd) in set_mss() argument
266 struct netio_options *o = td->eo; in set_mss()
277 td_verror(td, errno, "setsockopt TCP_MAXSEG"); in set_mss()
281 td_verror(td, -EINVAL, "setsockopt TCP_MAXSEG"); in set_mss()
291 static int poll_wait(struct thread_data *td, int fd, short events) in poll_wait() argument
296 while (!td->terminate) { in poll_wait()
304 td_verror(td, errno, "poll"); in poll_wait()
332 static int fio_netio_prep(struct thread_data *td, struct io_u *io_u) in fio_netio_prep() argument
334 struct netio_options *o = td->eo; in fio_netio_prep()
344 td_verror(td, EINVAL, "bad direction"); in fio_netio_prep()
377 static int splice_in(struct thread_data *td, struct io_u *io_u) in splice_in() argument
379 struct netio_data *nd = td->io_ops_data; in splice_in()
387 static int splice_out(struct thread_data *td, struct io_u *io_u, in splice_out() argument
390 struct netio_data *nd = td->io_ops_data; in splice_out()
425 static int vmsplice_io_u_out(struct thread_data *td, struct io_u *io_u, in vmsplice_io_u_out() argument
428 struct netio_data *nd = td->io_ops_data; in vmsplice_io_u_out()
436 static int vmsplice_io_u_in(struct thread_data *td, struct io_u *io_u) in vmsplice_io_u_in() argument
438 struct netio_data *nd = td->io_ops_data; in vmsplice_io_u_in()
447 static int fio_netio_splice_in(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_in() argument
451 ret = splice_in(td, io_u); in fio_netio_splice_in()
453 return vmsplice_io_u_out(td, io_u, ret); in fio_netio_splice_in()
462 static int fio_netio_splice_out(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_out() argument
466 ret = vmsplice_io_u_in(td, io_u); in fio_netio_splice_out()
468 return splice_out(td, io_u, ret); in fio_netio_splice_out()
473 static int fio_netio_splice_in(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_in() argument
479 static int fio_netio_splice_out(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_out() argument
499 static void verify_udp_seq(struct thread_data *td, struct netio_data *nd, in verify_udp_seq() argument
522 td->ts.drop_io_u[io_u->ddir] += seq - nd->udp_recv_seq; in verify_udp_seq()
527 static int fio_netio_send(struct thread_data *td, struct io_u *io_u) in fio_netio_send() argument
529 struct netio_data *nd = td->io_ops_data; in fio_netio_send()
530 struct netio_options *o = td->eo; in fio_netio_send()
546 if (td->o.verify == VERIFY_NONE) in fio_netio_send()
556 if ((td->this_io_bytes[DDIR_WRITE] + io_u->xfer_buflen < in fio_netio_send()
557 td->o.size) && !o->pingpong) in fio_netio_send()
566 ret = poll_wait(td, io_u->file->fd, POLLOUT); in fio_netio_send()
590 static int fio_netio_recv(struct thread_data *td, struct io_u *io_u) in fio_netio_recv() argument
592 struct netio_data *nd = td->io_ops_data; in fio_netio_recv()
593 struct netio_options *o = td->eo; in fio_netio_recv()
618 td->done = 1; in fio_netio_recv()
626 td->done = 1; in fio_netio_recv()
635 ret = poll_wait(td, io_u->file->fd, POLLIN); in fio_netio_recv()
641 if (is_udp(o) && td->o.verify == VERIFY_NONE) in fio_netio_recv()
642 verify_udp_seq(td, nd, io_u); in fio_netio_recv()
647 static int __fio_netio_queue(struct thread_data *td, struct io_u *io_u, in __fio_netio_queue() argument
650 struct netio_data *nd = td->io_ops_data; in __fio_netio_queue()
651 struct netio_options *o = td->eo; in __fio_netio_queue()
657 ret = fio_netio_send(td, io_u); in __fio_netio_queue()
659 ret = fio_netio_splice_out(td, io_u); in __fio_netio_queue()
663 ret = fio_netio_recv(td, io_u); in __fio_netio_queue()
665 ret = fio_netio_splice_in(td, io_u); in __fio_netio_queue()
687 td_verror(td, io_u->error, "xfer"); in __fio_netio_queue()
692 static int fio_netio_queue(struct thread_data *td, struct io_u *io_u) in fio_netio_queue() argument
694 struct netio_options *o = td->eo; in fio_netio_queue()
697 fio_ro_check(td, io_u); in fio_netio_queue()
699 ret = __fio_netio_queue(td, io_u, io_u->ddir); in fio_netio_queue()
706 if (td_read(td) && io_u->ddir == DDIR_READ) in fio_netio_queue()
707 ret = __fio_netio_queue(td, io_u, DDIR_WRITE); in fio_netio_queue()
708 else if (td_write(td) && io_u->ddir == DDIR_WRITE) in fio_netio_queue()
709 ret = __fio_netio_queue(td, io_u, DDIR_READ); in fio_netio_queue()
714 static int fio_netio_connect(struct thread_data *td, struct fio_file *f) in fio_netio_connect() argument
716 struct netio_data *nd = td->io_ops_data; in fio_netio_connect()
717 struct netio_options *o = td->eo; in fio_netio_connect()
743 td_verror(td, errno, "socket"); in fio_netio_connect()
758 if (set_window_size(td, f->fd)) { in fio_netio_connect()
762 if (set_mss(td, f->fd)) { in fio_netio_connect()
768 if (!fio_netio_is_multicast(td->o.filename)) in fio_netio_connect()
785 td_verror(td, errno, "setsockopt IP_MULTICAST_IF"); in fio_netio_connect()
791 td_verror(td, errno, "setsockopt IP_MULTICAST_TTL"); in fio_netio_connect()
800 td_verror(td, errno, "connect"); in fio_netio_connect()
808 td_verror(td, errno, "connect"); in fio_netio_connect()
820 td_verror(td, errno, "connect"); in fio_netio_connect()
829 static int fio_netio_accept(struct thread_data *td, struct fio_file *f) in fio_netio_accept() argument
831 struct netio_data *nd = td->io_ops_data; in fio_netio_accept()
832 struct netio_options *o = td->eo; in fio_netio_accept()
841 state = td->runstate; in fio_netio_accept()
842 td_set_runstate(td, TD_SETTING_UP); in fio_netio_accept()
846 if (poll_wait(td, nd->listenfd, POLLIN) < 0) in fio_netio_accept()
858 td_verror(td, errno, "accept"); in fio_netio_accept()
873 reset_all_stats(td); in fio_netio_accept()
874 td_set_runstate(td, state); in fio_netio_accept()
877 td_set_runstate(td, state); in fio_netio_accept()
881 static void fio_netio_send_close(struct thread_data *td, struct fio_file *f) in fio_netio_send_close() argument
883 struct netio_data *nd = td->io_ops_data; in fio_netio_send_close()
884 struct netio_options *o = td->eo; in fio_netio_send_close()
903 td_verror(td, errno, "sendto udp link close"); in fio_netio_send_close()
906 static int fio_netio_close_file(struct thread_data *td, struct fio_file *f) in fio_netio_close_file() argument
911 fio_netio_send_close(td, f); in fio_netio_close_file()
913 return generic_close_file(td, f); in fio_netio_close_file()
916 static int fio_netio_udp_recv_open(struct thread_data *td, struct fio_file *f) in fio_netio_udp_recv_open() argument
918 struct netio_data *nd = td->io_ops_data; in fio_netio_udp_recv_open()
919 struct netio_options *o = td->eo; in fio_netio_udp_recv_open()
935 td_verror(td, errno, "recvfrom udp link open"); in fio_netio_udp_recv_open()
946 fio_gettime(&td->start, NULL); in fio_netio_udp_recv_open()
950 static int fio_netio_send_open(struct thread_data *td, struct fio_file *f) in fio_netio_send_open() argument
952 struct netio_data *nd = td->io_ops_data; in fio_netio_send_open()
953 struct netio_options *o = td->eo; in fio_netio_send_open()
972 td_verror(td, errno, "sendto udp link open"); in fio_netio_send_open()
979 static int fio_netio_open_file(struct thread_data *td, struct fio_file *f) in fio_netio_open_file() argument
982 struct netio_options *o = td->eo; in fio_netio_open_file()
985 ret = fio_netio_accept(td, f); in fio_netio_open_file()
987 ret = fio_netio_connect(td, f); in fio_netio_open_file()
995 if (td_write(td)) in fio_netio_open_file()
996 ret = fio_netio_send_open(td, f); in fio_netio_open_file()
1000 state = td->runstate; in fio_netio_open_file()
1001 td_set_runstate(td, TD_SETTING_UP); in fio_netio_open_file()
1002 ret = fio_netio_udp_recv_open(td, f); in fio_netio_open_file()
1003 td_set_runstate(td, state); in fio_netio_open_file()
1008 fio_netio_close_file(td, f); in fio_netio_open_file()
1013 static int fio_fill_addr(struct thread_data *td, const char *host, int af, in fio_fill_addr() argument
1016 struct netio_options *o = td->eo; in fio_fill_addr()
1044 td_verror(td, e, str); in fio_fill_addr()
1051 static int fio_netio_setup_connect_inet(struct thread_data *td, in fio_netio_setup_connect_inet() argument
1054 struct netio_data *nd = td->io_ops_data; in fio_netio_setup_connect_inet()
1055 struct netio_options *o = td->eo; in fio_netio_setup_connect_inet()
1062 if (td_read(td)) in fio_netio_setup_connect_inet()
1065 td_verror(td, EINVAL, "no hostname= set"); in fio_netio_setup_connect_inet()
1082 if (fio_fill_addr(td, host, af, dst, &res)) in fio_netio_setup_connect_inet()
1101 static int fio_netio_setup_connect_unix(struct thread_data *td, in fio_netio_setup_connect_unix() argument
1104 struct netio_data *nd = td->io_ops_data; in fio_netio_setup_connect_unix()
1113 static int fio_netio_setup_connect(struct thread_data *td) in fio_netio_setup_connect() argument
1115 struct netio_options *o = td->eo; in fio_netio_setup_connect()
1118 return fio_netio_setup_connect_inet(td, td->o.filename,o->port); in fio_netio_setup_connect()
1120 return fio_netio_setup_connect_unix(td, td->o.filename); in fio_netio_setup_connect()
1123 static int fio_netio_setup_listen_unix(struct thread_data *td, const char *path) in fio_netio_setup_listen_unix() argument
1125 struct netio_data *nd = td->io_ops_data; in fio_netio_setup_listen_unix()
1156 static int fio_netio_setup_listen_inet(struct thread_data *td, short port) in fio_netio_setup_listen_inet() argument
1158 struct netio_data *nd = td->io_ops_data; in fio_netio_setup_listen_inet()
1159 struct netio_options *o = td->eo; in fio_netio_setup_listen_inet()
1187 td_verror(td, errno, "socket"); in fio_netio_setup_listen_inet()
1193 td_verror(td, errno, "setsockopt"); in fio_netio_setup_listen_inet()
1199 td_verror(td, errno, "setsockopt"); in fio_netio_setup_listen_inet()
1205 if (set_window_size(td, fd)) { in fio_netio_setup_listen_inet()
1209 if (set_mss(td, fd)) { in fio_netio_setup_listen_inet()
1214 if (td->o.filename) { in fio_netio_setup_listen_inet()
1215 if (!is_udp(o) || !fio_netio_is_multicast(td->o.filename)) { in fio_netio_setup_listen_inet()
1226 inet_aton(td->o.filename, &sin.sin_addr); in fio_netio_setup_listen_inet()
1240 td_verror(td, errno, "setsockopt IP_ADD_MEMBERSHIP"); in fio_netio_setup_listen_inet()
1264 td_verror(td, errno, "bind"); in fio_netio_setup_listen_inet()
1272 static int fio_netio_setup_listen(struct thread_data *td) in fio_netio_setup_listen() argument
1274 struct netio_data *nd = td->io_ops_data; in fio_netio_setup_listen()
1275 struct netio_options *o = td->eo; in fio_netio_setup_listen()
1279 ret = fio_netio_setup_listen_inet(td, o->port); in fio_netio_setup_listen()
1281 ret = fio_netio_setup_listen_unix(td, td->o.filename); in fio_netio_setup_listen()
1289 td_verror(td, errno, "listen"); in fio_netio_setup_listen()
1297 static int fio_netio_init(struct thread_data *td) in fio_netio_init() argument
1299 struct netio_options *o = td->eo; in fio_netio_init()
1307 if (td_random(td)) { in fio_netio_init()
1320 o->port += td->subjob_number; in fio_netio_init()
1327 if (td_rw(td)) { in fio_netio_init()
1332 if (o->proto == FIO_TYPE_UNIX && !td->o.filename) { in fio_netio_init()
1336 o->listen = td_read(td); in fio_netio_init()
1340 ret = fio_netio_setup_listen(td); in fio_netio_init()
1342 ret = fio_netio_setup_connect(td); in fio_netio_init()
1347 static void fio_netio_cleanup(struct thread_data *td) in fio_netio_cleanup() argument
1349 struct netio_data *nd = td->io_ops_data; in fio_netio_cleanup()
1363 static int fio_netio_setup(struct thread_data *td) in fio_netio_setup() argument
1367 if (!td->files_index) { in fio_netio_setup()
1368 add_file(td, td->o.filename ?: "net", 0, 0); in fio_netio_setup()
1369 td->o.nr_files = td->o.nr_files ?: 1; in fio_netio_setup()
1370 td->o.open_files++; in fio_netio_setup()
1373 if (!td->io_ops_data) { in fio_netio_setup()
1379 td->io_ops_data = nd; in fio_netio_setup()
1385 static void fio_netio_terminate(struct thread_data *td) in fio_netio_terminate() argument
1387 kill(td->pid, SIGTERM); in fio_netio_terminate()
1391 static int fio_netio_setup_splice(struct thread_data *td) in fio_netio_setup_splice() argument
1395 fio_netio_setup(td); in fio_netio_setup_splice()
1397 nd = td->io_ops_data; in fio_netio_setup_splice()
1448 if (o->td->o.filename) in str_hostname_cb()
1449 free(o->td->o.filename); in str_hostname_cb()
1450 o->td->o.filename = strdup(input); in str_hostname_cb()