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 --- |