Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net/core/user_dma.c: Use frag list abstraction interfaces.

Signed-off-by: David S. Miller <davem@davemloft.net>

+20 -22
+20 -22
net/core/user_dma.c
··· 51 51 { 52 52 int start = skb_headlen(skb); 53 53 int i, copy = start - offset; 54 + struct sk_buff *frag_iter; 54 55 dma_cookie_t cookie = 0; 55 56 56 57 /* Copy header. */ ··· 95 94 start = end; 96 95 } 97 96 98 - if (skb_shinfo(skb)->frag_list) { 99 - struct sk_buff *list = skb_shinfo(skb)->frag_list; 97 + skb_walk_frags(skb, frag_iter) { 98 + int end; 100 99 101 - for (; list; list = list->next) { 102 - int end; 100 + WARN_ON(start > offset + len); 103 101 104 - WARN_ON(start > offset + len); 105 - 106 - end = start + list->len; 107 - copy = end - offset; 108 - if (copy > 0) { 109 - if (copy > len) 110 - copy = len; 111 - cookie = dma_skb_copy_datagram_iovec(chan, list, 112 - offset - start, to, copy, 113 - pinned_list); 114 - if (cookie < 0) 115 - goto fault; 116 - len -= copy; 117 - if (len == 0) 118 - goto end; 119 - offset += copy; 120 - } 121 - start = end; 102 + end = start + frag_iter->len; 103 + copy = end - offset; 104 + if (copy > 0) { 105 + if (copy > len) 106 + copy = len; 107 + cookie = dma_skb_copy_datagram_iovec(chan, frag_iter, 108 + offset - start, 109 + to, copy, 110 + pinned_list); 111 + if (cookie < 0) 112 + goto fault; 113 + len -= copy; 114 + if (len == 0) 115 + goto end; 116 + offset += copy; 122 117 } 118 + start = end; 123 119 } 124 120 125 121 end: