diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-09-14 14:26:28 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-09-30 15:35:16 -0400 |
commit | c50b8ee02f1cb9506ac06d22e8414e9fef7d6890 (patch) | |
tree | c35319883629aa7ab0e90b132daebe89fd82df21 /net/sunrpc/xprtsock.c | |
parent | 277e4ab7d530bf287e02b65cfcd3ea8f489784f6 (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.c | 71 |
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 | ||
645 | static 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 | } | ||
661 | out: | ||
662 | mutex_unlock(&transport->recv_mutex); | ||
663 | trace_xs_stream_read_data(&transport->xprt, ret, read); | ||
664 | } | ||
665 | |||
666 | static 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 | ||
647 | static int xs_send_kvec(struct socket *sock, struct sockaddr *addr, int addrlen, struct kvec *vec, unsigned int base, int more) | 675 | static 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 | ||
1501 | static 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 | |||
1508 | restart: | ||
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); | ||
1528 | out: | ||
1529 | mutex_unlock(&transport->recv_mutex); | ||
1530 | trace_xs_tcp_data_ready(xprt, ret, read); | ||
1531 | } | ||
1532 | |||
1533 | static 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) { |