aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-09-23 19:49:31 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-09-23 19:49:31 -0400
commita4c12d6c5dde48c69464baf7c703e425ee511433 (patch)
tree73c375e41a353e2da0461ff30d744bff73958b08 /net/sunrpc/xprtsock.c
parent73af07de3e32b9ac328c3d1417258bb98a9b0a9b (diff)
parent3b9f9a1c3903b64c38505f9fed3bb11e48dbc931 (diff)
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (353 commits) [IPV6] ADDRCONF: Mobile IPv6 Home Address support. [IPV6] ADDRCONF: Allow non-DAD'able addresses. [IPV6] NDISC: Fix is_router flag setting. [IPV6] ADDRCONF: Convert addrconf_lock to RCU. [IPV6] NDISC: Add proxy_ndp sysctl. [IPV6] NDISC: Set per-entry is_router flag in Proxy NA. [IPV6] NDISC: Avoid updating neighbor cache for proxied address in receiving NA. [IPV6]: Don't forward packets to proxied link-local address. [IPV6] NDISC: Handle NDP messages to proxied addresses. [NETFILTER]: PPTP conntrack: fix another GRE keymap leak [NETFILTER]: PPTP conntrack: fix GRE keymap leak [NETFILTER]: PPTP conntrack: fix PPTP_IN_CALL message types [NETFILTER]: PPTP conntrack: check call ID before changing state [NETFILTER]: PPTP conntrack: clean up debugging cruft [NETFILTER]: PPTP conntrack: consolidate header parsing [NETFILTER]: PPTP conntrack: consolidate header size checks [NETFILTER]: PPTP conntrack: simplify expectation handling [NETFILTER]: PPTP conntrack: remove unnecessary cid/pcid header pointers [NETFILTER]: PPTP conntrack: fix header definitions [NETFILTER]: PPTP conntrack: remove more dead code ...
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 441bd53f5eca..897bdd982315 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -174,7 +174,6 @@ static inline int xs_sendpages(struct socket *sock, struct sockaddr *addr, int a
174 struct page **ppage = xdr->pages; 174 struct page **ppage = xdr->pages;
175 unsigned int len, pglen = xdr->page_len; 175 unsigned int len, pglen = xdr->page_len;
176 int err, ret = 0; 176 int err, ret = 0;
177 ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);
178 177
179 if (unlikely(!sock)) 178 if (unlikely(!sock))
180 return -ENOTCONN; 179 return -ENOTCONN;
@@ -207,7 +206,6 @@ static inline int xs_sendpages(struct socket *sock, struct sockaddr *addr, int a
207 base &= ~PAGE_CACHE_MASK; 206 base &= ~PAGE_CACHE_MASK;
208 } 207 }
209 208
210 sendpage = sock->ops->sendpage ? : sock_no_sendpage;
211 do { 209 do {
212 int flags = XS_SENDMSG_FLAGS; 210 int flags = XS_SENDMSG_FLAGS;
213 211
@@ -220,10 +218,7 @@ static inline int xs_sendpages(struct socket *sock, struct sockaddr *addr, int a
220 if (pglen != len || xdr->tail[0].iov_len != 0) 218 if (pglen != len || xdr->tail[0].iov_len != 0)
221 flags |= MSG_MORE; 219 flags |= MSG_MORE;
222 220
223 /* Hmm... We might be dealing with highmem pages */ 221 err = kernel_sendpage(sock, *ppage, base, len, flags);
224 if (PageHighMem(*ppage))
225 sendpage = sock_no_sendpage;
226 err = sendpage(sock, *ppage, base, len, flags);
227 if (ret == 0) 222 if (ret == 0)
228 ret = err; 223 ret = err;
229 else if (err > 0) 224 else if (err > 0)
@@ -986,7 +981,7 @@ static int xs_bindresvport(struct rpc_xprt *xprt, struct socket *sock)
986 981
987 do { 982 do {
988 myaddr.sin_port = htons(port); 983 myaddr.sin_port = htons(port);
989 err = sock->ops->bind(sock, (struct sockaddr *) &myaddr, 984 err = kernel_bind(sock, (struct sockaddr *) &myaddr,
990 sizeof(myaddr)); 985 sizeof(myaddr));
991 if (err == 0) { 986 if (err == 0) {
992 xprt->port = port; 987 xprt->port = port;
@@ -1081,7 +1076,7 @@ static void xs_tcp_reuse_connection(struct rpc_xprt *xprt)
1081 */ 1076 */
1082 memset(&any, 0, sizeof(any)); 1077 memset(&any, 0, sizeof(any));
1083 any.sa_family = AF_UNSPEC; 1078 any.sa_family = AF_UNSPEC;
1084 result = sock->ops->connect(sock, &any, sizeof(any), 0); 1079 result = kernel_connect(sock, &any, sizeof(any), 0);
1085 if (result) 1080 if (result)
1086 dprintk("RPC: AF_UNSPEC connect return code %d\n", 1081 dprintk("RPC: AF_UNSPEC connect return code %d\n",
1087 result); 1082 result);
@@ -1151,7 +1146,7 @@ static void xs_tcp_connect_worker(void *args)
1151 /* Tell the socket layer to start connecting... */ 1146 /* Tell the socket layer to start connecting... */
1152 xprt->stat.connect_count++; 1147 xprt->stat.connect_count++;
1153 xprt->stat.connect_start = jiffies; 1148 xprt->stat.connect_start = jiffies;
1154 status = sock->ops->connect(sock, (struct sockaddr *) &xprt->addr, 1149 status = kernel_connect(sock, (struct sockaddr *) &xprt->addr,
1155 sizeof(xprt->addr), O_NONBLOCK); 1150 sizeof(xprt->addr), O_NONBLOCK);
1156 dprintk("RPC: %p connect status %d connected %d sock state %d\n", 1151 dprintk("RPC: %p connect status %d connected %d sock state %d\n",
1157 xprt, -status, xprt_connected(xprt), sock->sk->sk_state); 1152 xprt, -status, xprt_connected(xprt), sock->sk->sk_state);