|
@@ -3918,23 +3918,16 @@ static inline void __qeth_fill_buffer(struct sk_buff *skb,
|
|
|
buffer->element[element].addr = data;
|
|
|
buffer->element[element].length = length_here;
|
|
|
length -= length_here;
|
|
|
- if (!length) {
|
|
|
- if (first_lap)
|
|
|
- if (skb_shinfo(skb)->nr_frags)
|
|
|
- buffer->element[element].eflags =
|
|
|
- SBAL_EFLAGS_FIRST_FRAG;
|
|
|
- else
|
|
|
- buffer->element[element].eflags = 0;
|
|
|
- else
|
|
|
- buffer->element[element].eflags =
|
|
|
- SBAL_EFLAGS_MIDDLE_FRAG;
|
|
|
- } else {
|
|
|
- if (first_lap)
|
|
|
+ if (first_lap) {
|
|
|
+ if (length || skb_is_nonlinear(skb))
|
|
|
+ /* skb needs additional elements */
|
|
|
buffer->element[element].eflags =
|
|
|
- SBAL_EFLAGS_FIRST_FRAG;
|
|
|
+ SBAL_EFLAGS_FIRST_FRAG;
|
|
|
else
|
|
|
- buffer->element[element].eflags =
|
|
|
- SBAL_EFLAGS_MIDDLE_FRAG;
|
|
|
+ buffer->element[element].eflags = 0;
|
|
|
+ } else {
|
|
|
+ buffer->element[element].eflags =
|
|
|
+ SBAL_EFLAGS_MIDDLE_FRAG;
|
|
|
}
|
|
|
data += length_here;
|
|
|
element++;
|