aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2018-09-14 14:26:28 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-09-30 15:35:16 -0400
commitc50b8ee02f1cb9506ac06d22e8414e9fef7d6890 (patch)
treec35319883629aa7ab0e90b132daebe89fd82df21 /net/sunrpc/xprtsock.c
parent277e4ab7d530bf287e02b65cfcd3ea8f489784f6 (diff)
SUNRPC: Clean up - rename xs_tcp_data_receive() to xs_stream_data_receive()
In preparation for sharing with AF_LOCAL. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c71
1 files changed, 30 insertions, 41 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 06aa75008708..55df1fadab27 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -626,7 +626,7 @@ xs_read_stream(struct sock_xprt *transport, int flags)
626 return -EAGAIN; 626 return -EAGAIN;
627 } 627 }
628 if (xs_read_stream_request_done(transport)) { 628 if (xs_read_stream_request_done(transport)) {
629 trace_xs_tcp_data_recv(transport); 629 trace_xs_stream_read_request(transport);
630 transport->recv.copied = 0; 630 transport->recv.copied = 0;
631 } 631 }
632 transport->recv.offset = 0; 632 transport->recv.offset = 0;
@@ -642,6 +642,34 @@ out_err:
642 return ret; 642 return ret;
643} 643}
644 644
645static void xs_stream_data_receive(struct sock_xprt *transport)
646{
647 size_t read = 0;
648 ssize_t ret = 0;
649
650 mutex_lock(&transport->recv_mutex);
651 if (transport->sock == NULL)
652 goto out;
653 clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
654 for (;;) {
655 ret = xs_read_stream(transport, MSG_DONTWAIT);
656 if (ret <= 0)
657 break;
658 read += ret;
659 cond_resched();
660 }
661out:
662 mutex_unlock(&transport->recv_mutex);
663 trace_xs_stream_read_data(&transport->xprt, ret, read);
664}
665
666static void xs_stream_data_receive_workfn(struct work_struct *work)
667{
668 struct sock_xprt *transport =
669 container_of(work, struct sock_xprt, recv_worker);
670 xs_stream_data_receive(transport);
671}
672
645#define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL) 673#define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL)
646 674
647static int xs_send_kvec(struct socket *sock, struct sockaddr *addr, int addrlen, struct kvec *vec, unsigned int base, int more) 675static int xs_send_kvec(struct socket *sock, struct sockaddr *addr, int addrlen, struct kvec *vec, unsigned int base, int more)
@@ -1498,45 +1526,6 @@ static size_t xs_tcp_bc_maxpayload(struct rpc_xprt *xprt)
1498} 1526}
1499#endif /* CONFIG_SUNRPC_BACKCHANNEL */ 1527#endif /* CONFIG_SUNRPC_BACKCHANNEL */
1500 1528
1501static void xs_tcp_data_receive(struct sock_xprt *transport)
1502{
1503 struct rpc_xprt *xprt = &transport->xprt;
1504 struct sock *sk;
1505 size_t read = 0;
1506 ssize_t ret = 0;
1507
1508restart:
1509 mutex_lock(&transport->recv_mutex);
1510 sk = transport->inet;
1511 if (sk == NULL)
1512 goto out;
1513
1514 for (;;) {
1515 clear_bit(XPRT_SOCK_DATA_READY, &transport->sock_state);
1516 ret = xs_read_stream(transport, MSG_DONTWAIT | MSG_NOSIGNAL);
1517 if (ret < 0)
1518 break;
1519 read += ret;
1520 if (need_resched()) {
1521 mutex_unlock(&transport->recv_mutex);
1522 cond_resched();
1523 goto restart;
1524 }
1525 }
1526 if (test_bit(XPRT_SOCK_DATA_READY, &transport->sock_state))
1527 queue_work(xprtiod_workqueue, &transport->recv_worker);
1528out:
1529 mutex_unlock(&transport->recv_mutex);
1530 trace_xs_tcp_data_ready(xprt, ret, read);
1531}
1532
1533static void xs_tcp_data_receive_workfn(struct work_struct *work)
1534{
1535 struct sock_xprt *transport =
1536 container_of(work, struct sock_xprt, recv_worker);
1537 xs_tcp_data_receive(transport);
1538}
1539
1540/** 1529/**
1541 * xs_tcp_state_change - callback to handle TCP socket state changes 1530 * xs_tcp_state_change - callback to handle TCP socket state changes
1542 * @sk: socket whose state has changed 1531 * @sk: socket whose state has changed
@@ -3066,7 +3055,7 @@ static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
3066 xprt->connect_timeout = xprt->timeout->to_initval * 3055 xprt->connect_timeout = xprt->timeout->to_initval *
3067 (xprt->timeout->to_retries + 1); 3056 (xprt->timeout->to_retries + 1);
3068 3057
3069 INIT_WORK(&transport->recv_worker, xs_tcp_data_receive_workfn); 3058 INIT_WORK(&transport->recv_worker, xs_stream_data_receive_workfn);
3070 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_setup_socket); 3059 INIT_DELAYED_WORK(&transport->connect_worker, xs_tcp_setup_socket);
3071 3060
3072 switch (addr->sa_family) { 3061 switch (addr->sa_family) {