]> www.infradead.org Git - users/willy/linux.git/commitdiff
net: avoid one loop iteration in __skb_splice_bits
authorPengtao He <hept.hept.hept@gmail.com>
Tue, 19 Aug 2025 02:15:51 +0000 (10:15 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 21 Aug 2025 02:24:17 +0000 (19:24 -0700)
If *len is equal to 0 at the beginning of __splice_segment
it returns true directly. But when decreasing *len from
a positive number to 0 in __splice_segment, it returns false.
The __skb_splice_bits needs to call __splice_segment again.

Recheck *len if it changes, return true in time.
Reduce unnecessary calls to __splice_segment.

Signed-off-by: Pengtao He <hept.hept.hept@gmail.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250819021551.8361-1-hept.hept.hept@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/skbuff.c

index ee0274417948e0eb121792a400a0455884c92e56..23b776cd98796cf8eb4d19868a0506423226914d 100644 (file)
@@ -3112,7 +3112,9 @@ static bool __splice_segment(struct page *page, unsigned int poff,
                poff += flen;
                plen -= flen;
                *len -= flen;
-       } while (*len && plen);
+               if (!*len)
+                       return true;
+       } while (plen);
 
        return false;
 }