 if (unlikely(!sock)) return -ENOTCONN;  clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags); 
static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen, struct xdr_buf *xdr, unsigned int base){	struct page **ppage = xdr->pages;	unsigned int len, pglen = xdr->page_len;	int err, ret = 0;	ssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);	len = xdr->head[0].iov_len;	if (base < len || (addr != NULL && base == 0)) {		err = xs_send_head(sock, addr, addrlen, xdr, base, len);		if (ret == 0)			ret = err;		else if (err > 0)			ret += err;		if (err != (len - base))			goto out;		base = 0;	} else		base -= len;	if (unlikely(pglen == 0))		goto copy_tail;	if (unlikely(base >= pglen)) {		base -= pglen;		goto copy_tail;	}	if (base || xdr->page_base) {		pglen -= base;		base += xdr->page_base;		ppage += base >> PAGE_CACHE_SHIFT;		base &= ~PAGE_CACHE_MASK;	}	sendpage = sock->ops->sendpage ? : sock_no_sendpage;	do {		int flags = XS_SENDMSG_FLAGS;		len = PAGE_CACHE_SIZE;		if (base)			len -= base;		if (pglen < len)			len = pglen;		if (pglen != len || xdr->tail[0].iov_len != 0)			flags |= MSG_MORE;		/* Hmm... We might be dealing with highmem pages */		if (PageHighMem(*ppage))			sendpage = sock_no_sendpage;		err = sendpage(sock, *ppage, base, len, flags);		if (ret == 0)			ret = err;		else if (err > 0)			ret += err;		if (err != len)			goto out;		base = 0;		ppage++;	} while ((pglen -= len) != 0);copy_tail:	len = xdr->tail[0].iov_len;	if (base < len) {		err = xs_send_tail(sock, xdr, base, len);		if (ret == 0)			ret = err;		else if (err > 0)			ret += err;	}out:	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/262965f53defd312a294b45366ea17907b6a616b/xprtsock.c/clean/net/sunrpc/xprtsock.c