OSDN Git Service

s390/qeth: simplify fragment type selection
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Tue, 15 Aug 2017 15:02:42 +0000 (17:02 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Aug 2017 17:58:39 +0000 (10:58 -0700)
Improve readability of the code that determines a buffer element's
fragment type, and reduce the number of cases down from 5 to 3.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Acked-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_core_main.c

index 4792cab..3623ba2 100644 (file)
@@ -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++;