Lines Matching refs:td
39 struct thread_data *td; member
225 static int set_window_size(struct thread_data *td, int fd) in set_window_size() argument
228 struct netio_options *o = td->eo; in set_window_size()
244 td_verror(td, errno, "rcvbuf window size"); in set_window_size()
250 td_verror(td, errno, "sndbuf window size"); in set_window_size()
255 td_verror(td, -EINVAL, "setsockopt window size"); in set_window_size()
260 static int set_mss(struct thread_data *td, int fd) in set_mss() argument
263 struct netio_options *o = td->eo; in set_mss()
274 td_verror(td, errno, "setsockopt TCP_MAXSEG"); in set_mss()
278 td_verror(td, -EINVAL, "setsockopt TCP_MAXSEG"); in set_mss()
288 static int poll_wait(struct thread_data *td, int fd, short events) in poll_wait() argument
293 while (!td->terminate) { in poll_wait()
301 td_verror(td, errno, "poll"); in poll_wait()
329 static int fio_netio_prep(struct thread_data *td, struct io_u *io_u) in fio_netio_prep() argument
331 struct netio_options *o = td->eo; in fio_netio_prep()
341 td_verror(td, EINVAL, "bad direction"); in fio_netio_prep()
374 static int splice_in(struct thread_data *td, struct io_u *io_u) in splice_in() argument
376 struct netio_data *nd = td->io_ops->data; in splice_in()
384 static int splice_out(struct thread_data *td, struct io_u *io_u, in splice_out() argument
387 struct netio_data *nd = td->io_ops->data; in splice_out()
422 static int vmsplice_io_u_out(struct thread_data *td, struct io_u *io_u, in vmsplice_io_u_out() argument
425 struct netio_data *nd = td->io_ops->data; in vmsplice_io_u_out()
433 static int vmsplice_io_u_in(struct thread_data *td, struct io_u *io_u) in vmsplice_io_u_in() argument
435 struct netio_data *nd = td->io_ops->data; in vmsplice_io_u_in()
444 static int fio_netio_splice_in(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_in() argument
448 ret = splice_in(td, io_u); in fio_netio_splice_in()
450 return vmsplice_io_u_out(td, io_u, ret); in fio_netio_splice_in()
459 static int fio_netio_splice_out(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_out() argument
463 ret = vmsplice_io_u_in(td, io_u); in fio_netio_splice_out()
465 return splice_out(td, io_u, ret); in fio_netio_splice_out()
470 static int fio_netio_splice_in(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_in() argument
476 static int fio_netio_splice_out(struct thread_data *td, struct io_u *io_u) in fio_netio_splice_out() argument
496 static void verify_udp_seq(struct thread_data *td, struct netio_data *nd, in verify_udp_seq() argument
519 td->ts.drop_io_u[io_u->ddir] += seq - nd->udp_recv_seq; in verify_udp_seq()
524 static int fio_netio_send(struct thread_data *td, struct io_u *io_u) in fio_netio_send() argument
526 struct netio_data *nd = td->io_ops->data; in fio_netio_send()
527 struct netio_options *o = td->eo; in fio_netio_send()
543 if (td->o.verify == VERIFY_NONE) in fio_netio_send()
553 if ((td->this_io_bytes[DDIR_WRITE] + io_u->xfer_buflen < in fio_netio_send()
554 td->o.size) && !o->pingpong) in fio_netio_send()
563 ret = poll_wait(td, io_u->file->fd, POLLOUT); in fio_netio_send()
587 static int fio_netio_recv(struct thread_data *td, struct io_u *io_u) in fio_netio_recv() argument
589 struct netio_data *nd = td->io_ops->data; in fio_netio_recv()
590 struct netio_options *o = td->eo; in fio_netio_recv()
615 td->done = 1; in fio_netio_recv()
623 td->done = 1; in fio_netio_recv()
632 ret = poll_wait(td, io_u->file->fd, POLLIN); in fio_netio_recv()
638 if (is_udp(o) && td->o.verify == VERIFY_NONE) in fio_netio_recv()
639 verify_udp_seq(td, nd, io_u); in fio_netio_recv()
644 static int __fio_netio_queue(struct thread_data *td, struct io_u *io_u, in __fio_netio_queue() argument
647 struct netio_data *nd = td->io_ops->data; in __fio_netio_queue()
648 struct netio_options *o = td->eo; in __fio_netio_queue()
654 ret = fio_netio_send(td, io_u); in __fio_netio_queue()
656 ret = fio_netio_splice_out(td, io_u); in __fio_netio_queue()
660 ret = fio_netio_recv(td, io_u); in __fio_netio_queue()
662 ret = fio_netio_splice_in(td, io_u); in __fio_netio_queue()
684 td_verror(td, io_u->error, "xfer"); in __fio_netio_queue()
689 static int fio_netio_queue(struct thread_data *td, struct io_u *io_u) in fio_netio_queue() argument
691 struct netio_options *o = td->eo; in fio_netio_queue()
694 fio_ro_check(td, io_u); in fio_netio_queue()
696 ret = __fio_netio_queue(td, io_u, io_u->ddir); in fio_netio_queue()
703 if (td_read(td) && io_u->ddir == DDIR_READ) in fio_netio_queue()
704 ret = __fio_netio_queue(td, io_u, DDIR_WRITE); in fio_netio_queue()
705 else if (td_write(td) && io_u->ddir == DDIR_WRITE) in fio_netio_queue()
706 ret = __fio_netio_queue(td, io_u, DDIR_READ); in fio_netio_queue()
711 static int fio_netio_connect(struct thread_data *td, struct fio_file *f) in fio_netio_connect() argument
713 struct netio_data *nd = td->io_ops->data; in fio_netio_connect()
714 struct netio_options *o = td->eo; in fio_netio_connect()
740 td_verror(td, errno, "socket"); in fio_netio_connect()
755 if (set_window_size(td, f->fd)) { in fio_netio_connect()
759 if (set_mss(td, f->fd)) { in fio_netio_connect()
765 if (!fio_netio_is_multicast(td->o.filename)) in fio_netio_connect()
782 td_verror(td, errno, "setsockopt IP_MULTICAST_IF"); in fio_netio_connect()
788 td_verror(td, errno, "setsockopt IP_MULTICAST_TTL"); in fio_netio_connect()
797 td_verror(td, errno, "connect"); in fio_netio_connect()
805 td_verror(td, errno, "connect"); in fio_netio_connect()
817 td_verror(td, errno, "connect"); in fio_netio_connect()
826 static int fio_netio_accept(struct thread_data *td, struct fio_file *f) in fio_netio_accept() argument
828 struct netio_data *nd = td->io_ops->data; in fio_netio_accept()
829 struct netio_options *o = td->eo; in fio_netio_accept()
838 state = td->runstate; in fio_netio_accept()
839 td_set_runstate(td, TD_SETTING_UP); in fio_netio_accept()
843 if (poll_wait(td, nd->listenfd, POLLIN) < 0) in fio_netio_accept()
855 td_verror(td, errno, "accept"); in fio_netio_accept()
870 reset_all_stats(td); in fio_netio_accept()
871 td_set_runstate(td, state); in fio_netio_accept()
874 td_set_runstate(td, state); in fio_netio_accept()
878 static void fio_netio_send_close(struct thread_data *td, struct fio_file *f) in fio_netio_send_close() argument
880 struct netio_data *nd = td->io_ops->data; in fio_netio_send_close()
881 struct netio_options *o = td->eo; in fio_netio_send_close()
900 td_verror(td, errno, "sendto udp link close"); in fio_netio_send_close()
903 static int fio_netio_close_file(struct thread_data *td, struct fio_file *f) in fio_netio_close_file() argument
908 fio_netio_send_close(td, f); in fio_netio_close_file()
910 return generic_close_file(td, f); in fio_netio_close_file()
913 static int fio_netio_udp_recv_open(struct thread_data *td, struct fio_file *f) in fio_netio_udp_recv_open() argument
915 struct netio_data *nd = td->io_ops->data; in fio_netio_udp_recv_open()
916 struct netio_options *o = td->eo; in fio_netio_udp_recv_open()
932 td_verror(td, errno, "recvfrom udp link open"); in fio_netio_udp_recv_open()
943 fio_gettime(&td->start, NULL); in fio_netio_udp_recv_open()
947 static int fio_netio_send_open(struct thread_data *td, struct fio_file *f) in fio_netio_send_open() argument
949 struct netio_data *nd = td->io_ops->data; in fio_netio_send_open()
950 struct netio_options *o = td->eo; in fio_netio_send_open()
969 td_verror(td, errno, "sendto udp link open"); in fio_netio_send_open()
976 static int fio_netio_open_file(struct thread_data *td, struct fio_file *f) in fio_netio_open_file() argument
979 struct netio_options *o = td->eo; in fio_netio_open_file()
982 ret = fio_netio_accept(td, f); in fio_netio_open_file()
984 ret = fio_netio_connect(td, f); in fio_netio_open_file()
992 if (td_write(td)) in fio_netio_open_file()
993 ret = fio_netio_send_open(td, f); in fio_netio_open_file()
997 state = td->runstate; in fio_netio_open_file()
998 td_set_runstate(td, TD_SETTING_UP); in fio_netio_open_file()
999 ret = fio_netio_udp_recv_open(td, f); in fio_netio_open_file()
1000 td_set_runstate(td, state); in fio_netio_open_file()
1005 fio_netio_close_file(td, f); in fio_netio_open_file()
1010 static int fio_fill_addr(struct thread_data *td, const char *host, int af, in fio_fill_addr() argument
1013 struct netio_options *o = td->eo; in fio_fill_addr()
1041 td_verror(td, e, str); in fio_fill_addr()
1048 static int fio_netio_setup_connect_inet(struct thread_data *td, in fio_netio_setup_connect_inet() argument
1051 struct netio_data *nd = td->io_ops->data; in fio_netio_setup_connect_inet()
1052 struct netio_options *o = td->eo; in fio_netio_setup_connect_inet()
1059 if (td_read(td)) in fio_netio_setup_connect_inet()
1062 td_verror(td, EINVAL, "no hostname= set"); in fio_netio_setup_connect_inet()
1079 if (fio_fill_addr(td, host, af, dst, &res)) in fio_netio_setup_connect_inet()
1098 static int fio_netio_setup_connect_unix(struct thread_data *td, in fio_netio_setup_connect_unix() argument
1101 struct netio_data *nd = td->io_ops->data; in fio_netio_setup_connect_unix()
1110 static int fio_netio_setup_connect(struct thread_data *td) in fio_netio_setup_connect() argument
1112 struct netio_options *o = td->eo; in fio_netio_setup_connect()
1115 return fio_netio_setup_connect_inet(td, td->o.filename,o->port); in fio_netio_setup_connect()
1117 return fio_netio_setup_connect_unix(td, td->o.filename); in fio_netio_setup_connect()
1120 static int fio_netio_setup_listen_unix(struct thread_data *td, const char *path) in fio_netio_setup_listen_unix() argument
1122 struct netio_data *nd = td->io_ops->data; in fio_netio_setup_listen_unix()
1153 static int fio_netio_setup_listen_inet(struct thread_data *td, short port) in fio_netio_setup_listen_inet() argument
1155 struct netio_data *nd = td->io_ops->data; in fio_netio_setup_listen_inet()
1156 struct netio_options *o = td->eo; in fio_netio_setup_listen_inet()
1184 td_verror(td, errno, "socket"); in fio_netio_setup_listen_inet()
1190 td_verror(td, errno, "setsockopt"); in fio_netio_setup_listen_inet()
1196 td_verror(td, errno, "setsockopt"); in fio_netio_setup_listen_inet()
1202 if (set_window_size(td, fd)) { in fio_netio_setup_listen_inet()
1206 if (set_mss(td, fd)) { in fio_netio_setup_listen_inet()
1211 if (td->o.filename) { in fio_netio_setup_listen_inet()
1212 if (!is_udp(o) || !fio_netio_is_multicast(td->o.filename)) { in fio_netio_setup_listen_inet()
1223 inet_aton(td->o.filename, &sin.sin_addr); in fio_netio_setup_listen_inet()
1237 td_verror(td, errno, "setsockopt IP_ADD_MEMBERSHIP"); in fio_netio_setup_listen_inet()
1261 td_verror(td, errno, "bind"); in fio_netio_setup_listen_inet()
1269 static int fio_netio_setup_listen(struct thread_data *td) in fio_netio_setup_listen() argument
1271 struct netio_data *nd = td->io_ops->data; in fio_netio_setup_listen()
1272 struct netio_options *o = td->eo; in fio_netio_setup_listen()
1276 ret = fio_netio_setup_listen_inet(td, o->port); in fio_netio_setup_listen()
1278 ret = fio_netio_setup_listen_unix(td, td->o.filename); in fio_netio_setup_listen()
1286 td_verror(td, errno, "listen"); in fio_netio_setup_listen()
1294 static int fio_netio_init(struct thread_data *td) in fio_netio_init() argument
1296 struct netio_options *o = td->eo; in fio_netio_init()
1304 if (td_random(td)) { in fio_netio_init()
1317 o->port += td->subjob_number; in fio_netio_init()
1324 if (td_rw(td)) { in fio_netio_init()
1329 if (o->proto == FIO_TYPE_UNIX && !td->o.filename) { in fio_netio_init()
1333 o->listen = td_read(td); in fio_netio_init()
1337 ret = fio_netio_setup_listen(td); in fio_netio_init()
1339 ret = fio_netio_setup_connect(td); in fio_netio_init()
1344 static void fio_netio_cleanup(struct thread_data *td) in fio_netio_cleanup() argument
1346 struct netio_data *nd = td->io_ops->data; in fio_netio_cleanup()
1360 static int fio_netio_setup(struct thread_data *td) in fio_netio_setup() argument
1364 if (!td->files_index) { in fio_netio_setup()
1365 add_file(td, td->o.filename ?: "net", 0, 0); in fio_netio_setup()
1366 td->o.nr_files = td->o.nr_files ?: 1; in fio_netio_setup()
1367 td->o.open_files++; in fio_netio_setup()
1370 if (!td->io_ops->data) { in fio_netio_setup()
1376 td->io_ops->data = nd; in fio_netio_setup()
1382 static void fio_netio_terminate(struct thread_data *td) in fio_netio_terminate() argument
1384 kill(td->pid, SIGTERM); in fio_netio_terminate()
1388 static int fio_netio_setup_splice(struct thread_data *td) in fio_netio_setup_splice() argument
1392 fio_netio_setup(td); in fio_netio_setup_splice()
1394 nd = td->io_ops->data; in fio_netio_setup_splice()
1445 if (o->td->o.filename) in str_hostname_cb()
1446 free(o->td->o.filename); in str_hostname_cb()
1447 o->td->o.filename = strdup(input); in str_hostname_cb()