[SUNRPC]: Update to use in-kernel sockets API.
authorSridhar Samudrala <sri@us.ibm.com>
Tue, 8 Aug 2006 03:58:01 +0000 (20:58 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Fri, 22 Sep 2006 21:54:06 +0000 (14:54 -0700)
Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Acked-by: James Morris <jmorris@namei.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sunrpc/svcsock.c
net/sunrpc/xprtsock.c

index d9a95732df46aabb6c8d9801d6e7d179b6618ca7..953aff89bcac1cf3399e28cd7b9e6f401070123d 100644 (file)
@@ -388,7 +388,7 @@ svc_sendto(struct svc_rqst *rqstp, struct xdr_buf *xdr)
        /* send head */
        if (slen == xdr->head[0].iov_len)
                flags = 0;
-       len = sock->ops->sendpage(sock, rqstp->rq_respages[0], 0, xdr->head[0].iov_len, flags);
+       len = kernel_sendpage(sock, rqstp->rq_respages[0], 0, xdr->head[0].iov_len, flags);
        if (len != xdr->head[0].iov_len)
                goto out;
        slen -= xdr->head[0].iov_len;
@@ -400,7 +400,7 @@ svc_sendto(struct svc_rqst *rqstp, struct xdr_buf *xdr)
        while (pglen > 0) {
                if (slen == size)
                        flags = 0;
-               result = sock->ops->sendpage(sock, *ppage, base, size, flags);
+               result = kernel_sendpage(sock, *ppage, base, size, flags);
                if (result > 0)
                        len += result;
                if (result != size)
@@ -413,7 +413,7 @@ svc_sendto(struct svc_rqst *rqstp, struct xdr_buf *xdr)
        }
        /* send tail */
        if (xdr->tail[0].iov_len) {
-               result = sock->ops->sendpage(sock, rqstp->rq_respages[rqstp->rq_restailpage], 
+               result = kernel_sendpage(sock, rqstp->rq_respages[rqstp->rq_restailpage],
                                             ((unsigned long)xdr->tail[0].iov_base)& (PAGE_SIZE-1),
                                             xdr->tail[0].iov_len, 0);
 
@@ -434,13 +434,10 @@ out:
 static int
 svc_recv_available(struct svc_sock *svsk)
 {
-       mm_segment_t    oldfs;
        struct socket   *sock = svsk->sk_sock;
        int             avail, err;
 
-       oldfs = get_fs(); set_fs(KERNEL_DS);
-       err = sock->ops->ioctl(sock, TIOCINQ, (unsigned long) &avail);
-       set_fs(oldfs);
+       err = kernel_sock_ioctl(sock, TIOCINQ, (unsigned long) &avail);
 
        return (err >= 0)? avail : err;
 }
@@ -472,7 +469,7 @@ svc_recvfrom(struct svc_rqst *rqstp, struct kvec *iov, int nr, int buflen)
         * at accept time. FIXME
         */
        alen = sizeof(rqstp->rq_addr);
-       sock->ops->getname(sock, (struct sockaddr *)&rqstp->rq_addr, &alen, 1);
+       kernel_getpeername(sock, (struct sockaddr *)&rqstp->rq_addr, &alen);
 
        dprintk("svc: socket %p recvfrom(%p, %Zu) = %d\n",
                rqstp->rq_sock, iov[0].iov_base, iov[0].iov_len, len);
@@ -758,7 +755,6 @@ svc_tcp_accept(struct svc_sock *svsk)
        struct svc_serv *serv = svsk->sk_server;
        struct socket   *sock = svsk->sk_sock;
        struct socket   *newsock;
-       const struct proto_ops *ops;
        struct svc_sock *newsvsk;
        int             err, slen;
 
@@ -766,29 +762,23 @@ svc_tcp_accept(struct svc_sock *svsk)
        if (!sock)
                return;
 
-       err = sock_create_lite(PF_INET, SOCK_STREAM, IPPROTO_TCP, &newsock);
-       if (err) {
+       clear_bit(SK_CONN, &svsk->sk_flags);
+       err = kernel_accept(sock, &newsock, O_NONBLOCK);
+       if (err < 0) {
                if (err == -ENOMEM)
                        printk(KERN_WARNING "%s: no more sockets!\n",
                               serv->sv_name);
-               return;
-       }
-
-       dprintk("svc: tcp_accept %p allocated\n", newsock);
-       newsock->ops = ops = sock->ops;
-
-       clear_bit(SK_CONN, &svsk->sk_flags);
-       if ((err = ops->accept(sock, newsock, O_NONBLOCK)) < 0) {
-               if (err != -EAGAIN && net_ratelimit())
+               else if (err != -EAGAIN && net_ratelimit())
                        printk(KERN_WARNING "%s: accept failed (err %d)!\n",
                                   serv->sv_name, -err);
-               goto failed;            /* aborted connection or whatever */
+               return;
        }
+
        set_bit(SK_CONN, &svsk->sk_flags);
        svc_sock_enqueue(svsk);
 
        slen = sizeof(sin);
-       err = ops->getname(newsock, (struct sockaddr *) &sin, &slen, 1);
+       err = kernel_getpeername(newsock, (struct sockaddr *) &sin, &slen);
        if (err < 0) {
                if (net_ratelimit())
                        printk(KERN_WARNING "%s: peername failed (err %d)!\n",
@@ -1406,14 +1396,14 @@ svc_create_socket(struct svc_serv *serv, int protocol, struct sockaddr_in *sin)
        if (sin != NULL) {
                if (type == SOCK_STREAM)
                        sock->sk->sk_reuse = 1; /* allow address reuse */
-               error = sock->ops->bind(sock, (struct sockaddr *) sin,
+               error = kernel_bind(sock, (struct sockaddr *) sin,
                                                sizeof(*sin));
                if (error < 0)
                        goto bummer;
        }
 
        if (protocol == IPPROTO_TCP) {
-               if ((error = sock->ops->listen(sock, 64)) < 0)
+               if ((error = kernel_listen(sock, 64)) < 0)
                        goto bummer;
        }
 
index 441bd53f5eca81fbb8d4bb495f5c72bfac1aebb0..8b319e375049b6dbc4cd9f4fdea9cf778a717eb6 100644 (file)
@@ -207,7 +207,7 @@ static inline int xs_sendpages(struct socket *sock, struct sockaddr *addr, int a
                base &= ~PAGE_CACHE_MASK;
        }
 
-       sendpage = sock->ops->sendpage ? : sock_no_sendpage;
+       sendpage = kernel_sendpage;
        do {
                int flags = XS_SENDMSG_FLAGS;
 
@@ -986,7 +986,7 @@ static int xs_bindresvport(struct rpc_xprt *xprt, struct socket *sock)
 
        do {
                myaddr.sin_port = htons(port);
-               err = sock->ops->bind(sock, (struct sockaddr *) &myaddr,
+               err = kernel_bind(sock, (struct sockaddr *) &myaddr,
                                                sizeof(myaddr));
                if (err == 0) {
                        xprt->port = port;
@@ -1081,7 +1081,7 @@ static void xs_tcp_reuse_connection(struct rpc_xprt *xprt)
         */
        memset(&any, 0, sizeof(any));
        any.sa_family = AF_UNSPEC;
-       result = sock->ops->connect(sock, &any, sizeof(any), 0);
+       result = kernel_connect(sock, &any, sizeof(any), 0);
        if (result)
                dprintk("RPC:      AF_UNSPEC connect return code %d\n",
                                result);
@@ -1151,7 +1151,7 @@ static void xs_tcp_connect_worker(void *args)
        /* Tell the socket layer to start connecting... */
        xprt->stat.connect_count++;
        xprt->stat.connect_start = jiffies;
-       status = sock->ops->connect(sock, (struct sockaddr *) &xprt->addr,
+       status = kernel_connect(sock, (struct sockaddr *) &xprt->addr,
                        sizeof(xprt->addr), O_NONBLOCK);
        dprintk("RPC: %p  connect status %d connected %d sock state %d\n",
                        xprt, -status, xprt_connected(xprt), sock->sk->sk_state);