qeth_eddp_copy_data_tcp(char *dst, struct qeth_eddp_data *eddp, int len,			u32 *hcsum){	struct skb_frag_struct *frag;	int left_in_frag;	int copy_len;	u8 *src;	QETH_DBF_TEXT(trace, 5, "eddpcdtc");	if (skb_shinfo(eddp->skb)->nr_frags == 0) {		memcpy(dst, eddp->skb->data + eddp->skb_offset, len);		*hcsum = csum_partial(eddp->skb->data + eddp->skb_offset, len,				      *hcsum);		eddp->skb_offset += len;	} else {		while (len > 0) {			if (eddp->frag < 0) {				/* we're in skb->data */				left_in_frag = qeth_get_skb_data_len(eddp->skb)						- eddp->skb_offset;				src = eddp->skb->data + eddp->skb_offset;			} else {				frag = &skb_shinfo(eddp->skb)->					frags[eddp->frag];				left_in_frag = frag->size - eddp->frag_offset;				src = (u8 *)(					(page_to_pfn(frag->page) << PAGE_SHIFT)+					frag->page_offset + eddp->frag_offset);			}			if (left_in_frag <= 0) {				eddp->frag++;				eddp->frag_offset = 0;				continue;			}			copy_len = min(left_in_frag, len);			memcpy(dst, src, copy_len);			*hcsum = csum_partial(src, copy_len, *hcsum);			dst += copy_len;			eddp->frag_offset += copy_len;			eddp->skb_offset += copy_len;			len -= copy_len;		}	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/05e08a2a297371564020f76d1bf8b3a931d5e1ed/qeth_eddp.c/buggy/drivers/s390/net/qeth_eddp.c