knfsd: add transport ops
Subsystems (3)
RFC PATCH 1/14 knfsd: add transport ops
Start moving to a transport switch for knfsd. Add a svc_sock_ops operations vector and move the sk_sendto and sk_recvfrom function pointers into it.
Signed-off-by Greg Banks <[email protected]>
Signed-off-by Peter Leckie <[email protected]>
---
include/linux/sunrpc/svcsock.h | 9 +++++++-- net/sunrpc/svcsock.c | 22 ++++++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-)
include/linux/sunrpc/svcsock.h +7 -2
@@ -11,6 +11,12 @@#include <linux/sunrpc/svc.h> +struct svc_sock_ops { +const char *sko_name; +int (*sko_recvfrom)(struct svc_rqst *rqstp); +int (*sko_sendto)(struct svc_rqst *rqstp); +}; +/* * RPC server socket. */
@@ -42,8 +48,7 @@ struct svc_sock {* be revisted */ struct mutex sk_mutex;/* to serialize sending data */ -int (*sk_recvfrom)(struct svc_rqst *rqstp); -int (*sk_sendto)(struct svc_rqst *rqstp); +const struct svc_sock_ops *sk_ops;/* We keep the old state_change and data_ready CB's here */ void (*sk_ostate)(struct sock *);
net/sunrpc/svcsock.c +16 -6
@@ -883,6 +883,12 @@ svc_udp_sendto(struct svc_rqst *rqstp)return error; } +static const struct svc_sock_ops svc_udp_ops = { + .sko_name ="udp" , + .sko_recvfrom = svc_udp_recvfrom, + .sko_sendto = svc_udp_sendto +}; +static void svc_udp_init (struct svc_sock *svsk) {
@@ -891,8 +897,7 @@ svc_udp_init(struct svc_sock *svsk) svsk->sk_sk->sk_data_ready = svc_udp_data_ready; svsk->sk_sk->sk_write_space = svc_write_space; - svsk->sk_recvfrom = svc_udp_recvfrom; - svsk->sk_sendto = svc_udp_sendto; + svsk->sk_ops = &svc_udp_ops;/* initialise setting must have enough space to * receive and respond to one request.
@@ -1320,14 +1325,19 @@ svc_tcp_sendto(struct svc_rqst *rqstp)return sent; } +static const struct svc_sock_ops svc_tcp_ops = { + .sko_name ="tcp" , + .sko_recvfrom = svc_tcp_recvfrom, + .sko_sendto = svc_tcp_sendto +}; +static void svc_tcp_init (struct svc_sock *svsk) {struct sock *sk = svsk->sk_sk;struct tcp_sock *tp =tcp_sk (sk); - svsk->sk_recvfrom = svc_tcp_recvfrom; - svsk->sk_sendto = svc_tcp_sendto; + svsk->sk_ops = &svc_tcp_ops;if (sk->sk_state ==TCP_LISTEN ) {dprintk ("setting up TCP socket for listening\n" );
@@ -1475,7 +1485,7 @@ svc_recv(struct svc_rqst *rqstp, long tidprintk ("svc: server %p, pool %u, socket %p, inuse=%d\n" , rqstp, pool->sp_id, svsk,atomic_read (&svsk->sk_inuse)); - len = svsk->sk_recvfrom (rqstp); + len = svsk->sk_ops->sko_recvfrom (rqstp);dprintk ("svc: got len=%d\n" , len);/* No data, incomplete (TCP) read, or accept() */
@@ -1535,7 +1545,7 @@ svc_send(struct svc_rqst *rqstp)if (test_bit (SK_DEAD , &svsk->sk_flags)) len = -ENOTCONN ;else - len = svsk->sk_sendto (rqstp); + len = svsk->sk_ops->sko_sendto (rqstp);mutex_unlock (&svsk->sk_mutex);svc_sock_release (rqstp);
Signature · 12 lines
Greg Banks, R&D Software Engineer, SGI Australian Software Group. Apparently, I'm Bedevere. Which MPHG character are you? I don't speak for SGI. ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ NFS maillist - [email protected] https://lists.sourceforge.net/lists/listinfo/nfs