On Wed, 2016-01-06 at 14:16 +0100, Hans Westgaard Ry wrote:I've had a look at ndo_features_check and understand that I could supply my own
Devices may have limits on the number of fragments in an skb theyUnfortunately this is not the right place to fix this issue.
support. Current codebase uses a constant as maximum for number of
fragments (MAX_SKB_FRAGS) one skb can hold and use.
When enabling scatter/gather and running traffic with many small
messages the codebase uses the maximum number of fragments and thereby
violates the max for certain devices.
An example of such a violation is when running IPoIB on a HCA
supporting 16 SGE on an architecture with 4K pagesize. The
MAX_SKB_FRAGS will be 17 (64K/4K+1) and because IPoIB adds yet another
segment we end up with send_requests with 18 SGE resulting in
kernel-panic.
The patch allows the device to limit the maximum number fragments used
in one skb.
The functionality corresponds to gso_max_size/gso_max_segs for gso.
Think about forwarding workloads, where the SKB is cooked by GRO engine.
Anyway, local TCP stack uses 32KB page fragments, so typical skb has no
more than 3 frags.
Look at ndo_features_check(), where the problematic device driver can
add its logic.