X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsunrpc%2Fxprt.c;h=de4bccc1c25ddf3baa9e550034ac867d32d17096;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=abfb211847b8967d4a0b540c36372823d2d99568;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index abfb21184..de4bccc1c 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -753,7 +753,7 @@ udp_data_ready(struct sock *sk, int len) struct rpc_rqst *rovr; struct sk_buff *skb; int err, repsize, copied; - u32 xid; + u32 _xid, *xp; read_lock(&sk->sk_callback_lock); dprintk("RPC: udp_data_ready...\n"); @@ -777,12 +777,14 @@ udp_data_ready(struct sock *sk, int len) } /* Copy the XID from the skb... */ - if (skb_copy_bits(skb, sizeof(struct udphdr), &xid, sizeof(xid)) < 0) + xp = skb_header_pointer(skb, sizeof(struct udphdr), + sizeof(_xid), &_xid); + if (xp == NULL) goto dropit; /* Look up and lock the request corresponding to the given XID */ spin_lock(&xprt->sock_lock); - rovr = xprt_lookup_rqst(xprt, xid); + rovr = xprt_lookup_rqst(xprt, *xp); if (!rovr) goto out_unlock; task = rovr->rq_task; @@ -973,7 +975,7 @@ static int tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, unsigned int offset, size_t len) { - struct rpc_xprt *xprt = (struct rpc_xprt *)rd_desc->buf; + struct rpc_xprt *xprt = rd_desc->arg.data; skb_reader_t desc = { .skb = skb, .offset = offset, @@ -1021,7 +1023,7 @@ static void tcp_data_ready(struct sock *sk, int bytes) goto out; /* We use rd_desc to pass struct xprt to tcp_data_recv */ - rd_desc.buf = (char *)xprt; + rd_desc.arg.data = xprt; rd_desc.count = 65536; tcp_read_sock(sk, &rd_desc, tcp_data_recv); out: @@ -1086,8 +1088,8 @@ xprt_write_space(struct sock *sk) /* Wait until we have enough socket memory */ if (xprt->stream) { - /* from net/ipv4/tcp.c:tcp_write_space */ - if (tcp_wspace(sk) < tcp_min_write_space(sk)) + /* from net/core/stream.c:sk_stream_write_space */ + if (sk_stream_wspace(sk) < sk_stream_min_wspace(sk)) goto out; } else { /* from net/core/sock.c:sock_def_write_space */ @@ -1296,21 +1298,6 @@ xprt_transmit(struct rpc_task *task) /* * Reserve an RPC call slot. */ -void -xprt_reserve(struct rpc_task *task) -{ - struct rpc_xprt *xprt = task->tk_xprt; - - task->tk_status = -EIO; - if (!xprt->shutdown) { - spin_lock(&xprt->xprt_lock); - do_xprt_reserve(task); - spin_unlock(&xprt->xprt_lock); - if (task->tk_rqstp) - del_timer_sync(&xprt->timer); - } -} - static inline void do_xprt_reserve(struct rpc_task *task) { @@ -1332,6 +1319,21 @@ do_xprt_reserve(struct rpc_task *task) rpc_sleep_on(&xprt->backlog, task, NULL, NULL); } +void +xprt_reserve(struct rpc_task *task) +{ + struct rpc_xprt *xprt = task->tk_xprt; + + task->tk_status = -EIO; + if (!xprt->shutdown) { + spin_lock(&xprt->xprt_lock); + do_xprt_reserve(task); + spin_unlock(&xprt->xprt_lock); + if (task->tk_rqstp) + del_timer_sync(&xprt->timer); + } +} + /* * Allocate a 'unique' XID */