Loading include/linux/sunrpc/svc_xprt.h +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ struct svc_xprt_ops { void (*xpo_detach)(struct svc_xprt *); void (*xpo_free)(struct svc_xprt *); int (*xpo_secure_port)(struct svc_rqst *); void (*xpo_kill_temp_xprt)(struct svc_xprt *); }; struct svc_xprt_class { Loading net/sunrpc/svc_xprt.c +1 −10 Original line number Diff line number Diff line Loading @@ -1002,14 +1002,8 @@ static void svc_age_temp_xprts(unsigned long closure) void svc_age_temp_xprts_now(struct svc_serv *serv, struct sockaddr *server_addr) { struct svc_xprt *xprt; struct svc_sock *svsk; struct socket *sock; struct list_head *le, *next; LIST_HEAD(to_be_closed); struct linger no_linger = { .l_onoff = 1, .l_linger = 0, }; spin_lock_bh(&serv->sv_lock); list_for_each_safe(le, next, &serv->sv_tempsocks) { Loading @@ -1027,10 +1021,7 @@ void svc_age_temp_xprts_now(struct svc_serv *serv, struct sockaddr *server_addr) list_del_init(le); xprt = list_entry(le, struct svc_xprt, xpt_list); dprintk("svc_age_temp_xprts_now: closing %p\n", xprt); svsk = container_of(xprt, struct svc_sock, sk_xprt); sock = svsk->sk_sock; kernel_setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&no_linger, sizeof(no_linger)); xprt->xpt_ops->xpo_kill_temp_xprt(xprt); svc_close_xprt(xprt); } } Loading net/sunrpc/svcsock.c +21 −0 Original line number Diff line number Diff line Loading @@ -438,6 +438,21 @@ static int svc_tcp_has_wspace(struct svc_xprt *xprt) return !test_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); } static void svc_tcp_kill_temp_xprt(struct svc_xprt *xprt) { struct svc_sock *svsk; struct socket *sock; struct linger no_linger = { .l_onoff = 1, .l_linger = 0, }; svsk = container_of(xprt, struct svc_sock, sk_xprt); sock = svsk->sk_sock; kernel_setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&no_linger, sizeof(no_linger)); } /* * See net/ipv6/ip_sockglue.c : ip_cmsg_recv_pktinfo */ Loading Loading @@ -648,6 +663,10 @@ static struct svc_xprt *svc_udp_accept(struct svc_xprt *xprt) return NULL; } static void svc_udp_kill_temp_xprt(struct svc_xprt *xprt) { } static struct svc_xprt *svc_udp_create(struct svc_serv *serv, struct net *net, struct sockaddr *sa, int salen, Loading @@ -667,6 +686,7 @@ static struct svc_xprt_ops svc_udp_ops = { .xpo_has_wspace = svc_udp_has_wspace, .xpo_accept = svc_udp_accept, .xpo_secure_port = svc_sock_secure_port, .xpo_kill_temp_xprt = svc_udp_kill_temp_xprt, }; static struct svc_xprt_class svc_udp_class = { Loading Loading @@ -1242,6 +1262,7 @@ static struct svc_xprt_ops svc_tcp_ops = { .xpo_has_wspace = svc_tcp_has_wspace, .xpo_accept = svc_tcp_accept, .xpo_secure_port = svc_sock_secure_port, .xpo_kill_temp_xprt = svc_tcp_kill_temp_xprt, }; static struct svc_xprt_class svc_tcp_class = { Loading net/sunrpc/xprtrdma/svc_rdma_transport.c +6 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ static void svc_rdma_detach(struct svc_xprt *xprt); static void svc_rdma_free(struct svc_xprt *xprt); static int svc_rdma_has_wspace(struct svc_xprt *xprt); static int svc_rdma_secure_port(struct svc_rqst *); static void svc_rdma_kill_temp_xprt(struct svc_xprt *); static struct svc_xprt_ops svc_rdma_ops = { .xpo_create = svc_rdma_create, Loading @@ -79,6 +80,7 @@ static struct svc_xprt_ops svc_rdma_ops = { .xpo_has_wspace = svc_rdma_has_wspace, .xpo_accept = svc_rdma_accept, .xpo_secure_port = svc_rdma_secure_port, .xpo_kill_temp_xprt = svc_rdma_kill_temp_xprt, }; struct svc_xprt_class svc_rdma_class = { Loading Loading @@ -1317,6 +1319,10 @@ static int svc_rdma_secure_port(struct svc_rqst *rqstp) return 1; } static void svc_rdma_kill_temp_xprt(struct svc_xprt *xprt) { } int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr) { struct ib_send_wr *bad_wr, *n_wr; Loading Loading
include/linux/sunrpc/svc_xprt.h +1 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ struct svc_xprt_ops { void (*xpo_detach)(struct svc_xprt *); void (*xpo_free)(struct svc_xprt *); int (*xpo_secure_port)(struct svc_rqst *); void (*xpo_kill_temp_xprt)(struct svc_xprt *); }; struct svc_xprt_class { Loading
net/sunrpc/svc_xprt.c +1 −10 Original line number Diff line number Diff line Loading @@ -1002,14 +1002,8 @@ static void svc_age_temp_xprts(unsigned long closure) void svc_age_temp_xprts_now(struct svc_serv *serv, struct sockaddr *server_addr) { struct svc_xprt *xprt; struct svc_sock *svsk; struct socket *sock; struct list_head *le, *next; LIST_HEAD(to_be_closed); struct linger no_linger = { .l_onoff = 1, .l_linger = 0, }; spin_lock_bh(&serv->sv_lock); list_for_each_safe(le, next, &serv->sv_tempsocks) { Loading @@ -1027,10 +1021,7 @@ void svc_age_temp_xprts_now(struct svc_serv *serv, struct sockaddr *server_addr) list_del_init(le); xprt = list_entry(le, struct svc_xprt, xpt_list); dprintk("svc_age_temp_xprts_now: closing %p\n", xprt); svsk = container_of(xprt, struct svc_sock, sk_xprt); sock = svsk->sk_sock; kernel_setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&no_linger, sizeof(no_linger)); xprt->xpt_ops->xpo_kill_temp_xprt(xprt); svc_close_xprt(xprt); } } Loading
net/sunrpc/svcsock.c +21 −0 Original line number Diff line number Diff line Loading @@ -438,6 +438,21 @@ static int svc_tcp_has_wspace(struct svc_xprt *xprt) return !test_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); } static void svc_tcp_kill_temp_xprt(struct svc_xprt *xprt) { struct svc_sock *svsk; struct socket *sock; struct linger no_linger = { .l_onoff = 1, .l_linger = 0, }; svsk = container_of(xprt, struct svc_sock, sk_xprt); sock = svsk->sk_sock; kernel_setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&no_linger, sizeof(no_linger)); } /* * See net/ipv6/ip_sockglue.c : ip_cmsg_recv_pktinfo */ Loading Loading @@ -648,6 +663,10 @@ static struct svc_xprt *svc_udp_accept(struct svc_xprt *xprt) return NULL; } static void svc_udp_kill_temp_xprt(struct svc_xprt *xprt) { } static struct svc_xprt *svc_udp_create(struct svc_serv *serv, struct net *net, struct sockaddr *sa, int salen, Loading @@ -667,6 +686,7 @@ static struct svc_xprt_ops svc_udp_ops = { .xpo_has_wspace = svc_udp_has_wspace, .xpo_accept = svc_udp_accept, .xpo_secure_port = svc_sock_secure_port, .xpo_kill_temp_xprt = svc_udp_kill_temp_xprt, }; static struct svc_xprt_class svc_udp_class = { Loading Loading @@ -1242,6 +1262,7 @@ static struct svc_xprt_ops svc_tcp_ops = { .xpo_has_wspace = svc_tcp_has_wspace, .xpo_accept = svc_tcp_accept, .xpo_secure_port = svc_sock_secure_port, .xpo_kill_temp_xprt = svc_tcp_kill_temp_xprt, }; static struct svc_xprt_class svc_tcp_class = { Loading
net/sunrpc/xprtrdma/svc_rdma_transport.c +6 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ static void svc_rdma_detach(struct svc_xprt *xprt); static void svc_rdma_free(struct svc_xprt *xprt); static int svc_rdma_has_wspace(struct svc_xprt *xprt); static int svc_rdma_secure_port(struct svc_rqst *); static void svc_rdma_kill_temp_xprt(struct svc_xprt *); static struct svc_xprt_ops svc_rdma_ops = { .xpo_create = svc_rdma_create, Loading @@ -79,6 +80,7 @@ static struct svc_xprt_ops svc_rdma_ops = { .xpo_has_wspace = svc_rdma_has_wspace, .xpo_accept = svc_rdma_accept, .xpo_secure_port = svc_rdma_secure_port, .xpo_kill_temp_xprt = svc_rdma_kill_temp_xprt, }; struct svc_xprt_class svc_rdma_class = { Loading Loading @@ -1317,6 +1319,10 @@ static int svc_rdma_secure_port(struct svc_rqst *rqstp) return 1; } static void svc_rdma_kill_temp_xprt(struct svc_xprt *xprt) { } int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr) { struct ib_send_wr *bad_wr, *n_wr; Loading