if (!(xprt->tcp_flags & XPRT_COPY_DATA)) { dprintk("RPC: %4d received reply complete\n", req->rq_task->tk_pid); xprt_complete_rqst(xprt, req, xprt->tcp_copied); } 
if (!(xprt->tcp_flags & XPRT_COPY_DATA)) xprt_complete_rqst(req->rq_task, xprt->tcp_copied); 
static inline void xs_tcp_read_request(struct rpc_xprt *xprt, skb_reader_t *desc){	struct rpc_rqst *req;	struct xdr_buf *rcvbuf;	size_t len;	ssize_t r;	/* Find and lock the request corresponding to this xid */	spin_lock(&xprt->transport_lock);	req = xprt_lookup_rqst(xprt, xprt->tcp_xid);	if (!req) {		xprt->tcp_flags &= ~XPRT_COPY_DATA;		dprintk("RPC:      XID %08x request not found!\n",				ntohl(xprt->tcp_xid));		spin_unlock(&xprt->transport_lock);		return;	}	rcvbuf = &req->rq_private_buf;	len = desc->count;	if (len > xprt->tcp_reclen - xprt->tcp_offset) {		skb_reader_t my_desc;		len = xprt->tcp_reclen - xprt->tcp_offset;		memcpy(&my_desc, desc, sizeof(my_desc));		my_desc.count = len;		r = xdr_partial_copy_from_skb(rcvbuf, xprt->tcp_copied,					  &my_desc, xs_tcp_copy_data);		desc->count -= r;		desc->offset += r;	} else		r = xdr_partial_copy_from_skb(rcvbuf, xprt->tcp_copied,					  desc, xs_tcp_copy_data);	if (r > 0) {		xprt->tcp_copied += r;		xprt->tcp_offset += r;	}	if (r != len) {		/* Error when copying to the receive buffer,		 * usually because we weren't able to allocate		 * additional buffer pages. All we can do now		 * is turn off XPRT_COPY_DATA, so the request		 * will not receive any additional updates,		 * and time out.		 * Any remaining data from this record will		 * be discarded.		 */		xprt->tcp_flags &= ~XPRT_COPY_DATA;		dprintk("RPC:      XID %08x truncated request\n",				ntohl(xprt->tcp_xid));		dprintk("RPC:      xprt = %p, tcp_copied = %lu, tcp_offset = %u, tcp_reclen = %u\n",				xprt, xprt->tcp_copied, xprt->tcp_offset, xprt->tcp_reclen);		goto out;	}	dprintk("RPC:      XID %08x read %Zd bytes\n",			ntohl(xprt->tcp_xid), r);	dprintk("RPC:      xprt = %p, tcp_copied = %lu, tcp_offset = %u, tcp_reclen = %u\n",			xprt, xprt->tcp_copied, xprt->tcp_offset, xprt->tcp_reclen);	if (xprt->tcp_copied == req->rq_private_buf.buflen)		xprt->tcp_flags &= ~XPRT_COPY_DATA;	else if (xprt->tcp_offset == xprt->tcp_reclen) {		if (xprt->tcp_flags & XPRT_LAST_FRAG)			xprt->tcp_flags &= ~XPRT_COPY_DATA;	}out:	if (!(xprt->tcp_flags & XPRT_COPY_DATA)) {		dprintk("RPC: %4d received reply complete\n",				req->rq_task->tk_pid);		xprt_complete_rqst(xprt, req, xprt->tcp_copied);	}	spin_unlock(&xprt->transport_lock);	xs_tcp_check_recm(xprt);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1570c1e41eabf6b7031f3e4322a2cf1cbe319fee/xprtsock.c/clean/net/sunrpc/xprtsock.c