summaryrefslogtreecommitdiff
path: root/net/mctp/test
diff options
context:
space:
mode:
authorJeremy Kerr <jk@codeconstruct.com.au>2026-03-24 15:19:56 +0800
committerJakub Kicinski <kuba@kernel.org>2026-03-26 18:47:29 -0700
commite1877cf6231152ff4686bd9900a6a88ffdd90f84 (patch)
treee59160a7e8e5357756e8e9c02fa89bc75471078f /net/mctp/test
parent2b8e147c006ef2b40863be1911e29dd5731c205d (diff)
downloadlwn-e1877cf6231152ff4686bd9900a6a88ffdd90f84.tar.gz
lwn-e1877cf6231152ff4686bd9900a6a88ffdd90f84.zip
net: mctp: avoid copy in fragmentation loop for near-MTU messages
Currently, we incorrectly send messages that are within 4 bytes (a struct mctp_hdr) smaller than the MTU through mctp_do_fragment_route(). This has no effect on the actual fragmentation, as we will still send as one packet, but unnecessarily copies the original skb into a new single-fragment skb. Instead of having the MTU comparisons in both mctp_local_output() and mctp_do_fragment_route(), feed all local messages through the latter, and add the single-packet optimisation there. This means we can coalesce the routing path of mctp_local_output, so our out_release path is now solely for errors, so rename the label accordingly. Include a check in the route tests for the single-packet case too. Reported-by: yuanzhaoming <yuanzm2@lenovo.com> Closes: https://github.com/openbmc/linux/commit/269936db5eb3962fe290b1dc4dbf1859cd5a04dd#r175836230 Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20260324-dev-mtu-copy-v1-1-7af6bd7027d3@codeconstruct.com.au Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/mctp/test')
-rw-r--r--net/mctp/test/route-test.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/mctp/test/route-test.c b/net/mctp/test/route-test.c
index 75ea96c10e49..61c989c43ec0 100644
--- a/net/mctp/test/route-test.c
+++ b/net/mctp/test/route-test.c
@@ -63,6 +63,10 @@ static void mctp_test_fragment(struct kunit *test)
if (!skb2)
break;
+ /* avoid copying single-skb messages */
+ if (first && last)
+ KUNIT_EXPECT_PTR_EQ(test, skb, skb2);
+
hdr2 = mctp_hdr(skb2);
tag_mask = MCTP_HDR_TAG_MASK | MCTP_HDR_FLAG_TO;