datapath: Fix WARN_ON sending GSO packets to userspace in Linux 2.6.22+.
authorBen Pfaff <blp@nicira.com>
Mon, 14 Sep 2009 16:20:58 +0000 (09:20 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 14 Sep 2009 19:20:00 +0000 (12:20 -0700)
commitcb5087caddd187e71d5f32118d8d807c9c131725
tree09d42b3b79b9917aa9dced9543541fc30b5ec456
parent0d3b8a34d6eabf049ae7e2d5689a0e687495100d
datapath: Fix WARN_ON sending GSO packets to userspace in Linux 2.6.22+.

Until now, when dp_output_control() queued a GSO packet to userspace, it
would first compute the checksum for the whole GSO packet, then break the
packet into segments.  However this had two drawbacks:

    1. The checksum had to be recomputed for each segment, wasting time.
    2. Linux 2.6.22 and later would emit a warning in skb_gso_segment()
       because the checksum was precomputed.

This commit changes dp_output_control() to instead break the packet into
segments, then compute the checksum across each of the segments
individually.  This fixes both drawbacks.

This commit has seen light testing on Xen's 2.6.27.  It has been build
tested on a few different kernel versions.
datapath/datapath.c