Le vendredi 10 dÃcembre 2010 Ã 02:13 -0800, Shirley Ma a Ãcrit : > + while (len) { > + f = &skb_shinfo(skb)->frags[i]; > + f->page = page[i]; > + f->page_offset = base & ~PAGE_MASK; > + f->size = min_t(int, len, PAGE_SIZE - f->page_offset); > + skb->data_len += f->size; > + skb->len += f->size; > + skb->truesize += f->size; > + skb_shinfo(skb)->nr_frags++; > + /* increase sk_wmem_alloc */ > + atomic_add(f->size, &skb->sk->sk_wmem_alloc); > + base += f->size; > + len -= f->size; > + i++; > + } You could make one atomic_add() outside of the loop, and factorize many things... atomic_add(len, &skb->sk->sk_wmem_alloc); skb->data_len += len; skb->len += len; skb->truesize += len; while (len) { ... } -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html