buf_to_sg(sg, buf->head[0].iov_base + offset, thislen); 
sg_set_buf(sg, buf->head[0].iov_base + offset, thislen); 
process_xdr_buf(struct xdr_buf *buf, int offset, int len,		int (*actor)(struct scatterlist *, void *), void *data){	int i, page_len, thislen, page_offset, ret = 0;	struct scatterlist	sg[1];	if (offset >= buf->head[0].iov_len) {		offset -= buf->head[0].iov_len;	} else {		thislen = buf->head[0].iov_len - offset;		if (thislen > len)			thislen = len;		buf_to_sg(sg, buf->head[0].iov_base + offset, thislen);		ret = actor(sg, data);		if (ret)			goto out;		offset = 0;		len -= thislen;	}	if (len == 0)		goto out;	if (offset >= buf->page_len) {		offset -= buf->page_len;	} else {		page_len = buf->page_len - offset;		if (page_len > len)			page_len = len;		len -= page_len;		page_offset = (offset + buf->page_base) & (PAGE_CACHE_SIZE - 1);		i = (offset + buf->page_base) >> PAGE_CACHE_SHIFT;		thislen = PAGE_CACHE_SIZE - page_offset;		do {			if (thislen > page_len)				thislen = page_len;			sg->page = buf->pages[i];			sg->offset = page_offset;			sg->length = thislen;			ret = actor(sg, data);			if (ret)				goto out;			page_len -= thislen;			i++;			page_offset = 0;			thislen = PAGE_CACHE_SIZE;		} while (page_len != 0);		offset = 0;	}	if (len == 0)		goto out;	if (offset < buf->tail[0].iov_len) {		thislen = buf->tail[0].iov_len - offset;		if (thislen > len)			thislen = len;		buf_to_sg(sg, buf->tail[0].iov_base + offset, thislen);		ret = actor(sg, data);		len -= thislen;	}	if (len != 0)		ret = -EINVAL;out:	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/378f058cc49bcda7fa63d3cd86d2f9a0a5188b1c/gss_krb5_crypto.c/clean/net/sunrpc/auth_gss/gss_krb5_crypto.c