libcxgbi.c (7e66eaf14e19c032433be7c4df3c892fa2a5282f) libcxgbi.c (9e903e085262ffbf1fc44a17ac06058aca03524a)
1/*
2 * libcxgbi.c: Chelsio common library for T3/T4 iSCSI driver.
3 *
4 * Copyright (c) 2010 Chelsio Communications, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation.

--- 1800 unchanged lines hidden (view full) ---

1809 sgoffset = 0;
1810 sglen = sg->length;
1811 page = sg_page(sg);
1812
1813 }
1814 copy = min(datalen, sglen);
1815 if (i && page == frags[i - 1].page &&
1816 sgoffset + sg->offset ==
1/*
2 * libcxgbi.c: Chelsio common library for T3/T4 iSCSI driver.
3 *
4 * Copyright (c) 2010 Chelsio Communications, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation.

--- 1800 unchanged lines hidden (view full) ---

1809 sgoffset = 0;
1810 sglen = sg->length;
1811 page = sg_page(sg);
1812
1813 }
1814 copy = min(datalen, sglen);
1815 if (i && page == frags[i - 1].page &&
1816 sgoffset + sg->offset ==
1817 frags[i - 1].page_offset + frags[i - 1].size) {
1818 frags[i - 1].size += copy;
1817 frags[i - 1].page_offset + skb_frag_size(&frags[i - 1])) {
1818 skb_frag_size_add(&frags[i - 1], copy);
1819 } else {
1820 if (i >= frag_max) {
1821 pr_warn("too many pages %u, dlen %u.\n",
1822 frag_max, dlen);
1823 return -EINVAL;
1824 }
1825
1826 frags[i].page = page;
1827 frags[i].page_offset = sg->offset + sgoffset;
1819 } else {
1820 if (i >= frag_max) {
1821 pr_warn("too many pages %u, dlen %u.\n",
1822 frag_max, dlen);
1823 return -EINVAL;
1824 }
1825
1826 frags[i].page = page;
1827 frags[i].page_offset = sg->offset + sgoffset;
1828 frags[i].size = copy;
1828 skb_frag_size_set(&frags[i], copy);
1829 i++;
1830 }
1831 datalen -= copy;
1832 sgoffset += copy;
1833 sglen -= copy;
1834 } while (datalen);
1835
1836 return i;

--- 109 unchanged lines hidden (view full) ---

1946 char *dst = skb->data + task->hdr_len;
1947 skb_frag_t *frag = tdata->frags;
1948
1949 /* data fits in the skb's headroom */
1950 for (i = 0; i < tdata->nr_frags; i++, frag++) {
1951 char *src = kmap_atomic(frag->page,
1952 KM_SOFTIRQ0);
1953
1829 i++;
1830 }
1831 datalen -= copy;
1832 sgoffset += copy;
1833 sglen -= copy;
1834 } while (datalen);
1835
1836 return i;

--- 109 unchanged lines hidden (view full) ---

1946 char *dst = skb->data + task->hdr_len;
1947 skb_frag_t *frag = tdata->frags;
1948
1949 /* data fits in the skb's headroom */
1950 for (i = 0; i < tdata->nr_frags; i++, frag++) {
1951 char *src = kmap_atomic(frag->page,
1952 KM_SOFTIRQ0);
1953
1954 memcpy(dst, src+frag->page_offset, frag->size);
1955 dst += frag->size;
1954 memcpy(dst, src+frag->page_offset, skb_frag_size(frag));
1955 dst += skb_frag_size(frag);
1956 kunmap_atomic(src, KM_SOFTIRQ0);
1957 }
1958 if (padlen) {
1959 memset(dst, 0, padlen);
1960 padlen = 0;
1961 }
1962 skb_put(skb, count + padlen);
1963 } else {

--- 626 unchanged lines hidden ---
1956 kunmap_atomic(src, KM_SOFTIRQ0);
1957 }
1958 if (padlen) {
1959 memset(dst, 0, padlen);
1960 padlen = 0;
1961 }
1962 skb_put(skb, count + padlen);
1963 } else {

--- 626 unchanged lines hidden ---