mptcp: shrink mptcp_out_options struct
authorPaolo Abeni <pabeni@redhat.com>
Tue, 24 Aug 2021 23:26:14 +0000 (16:26 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Aug 2021 10:02:34 +0000 (11:02 +0100)
After the previous patch we can alias with a union several
fields in mptcp_out_options. Such struct is stack allocated and
memset() for each plain TCP out packet. Every saved byted counts.

Before:
pahole -EC mptcp_out_options
 # ...
/* size: 136, cachelines: 3, members: 17 */

After:
pahole -EC mptcp_out_options
 # ...
/* size: 56, cachelines: 1, members: 9 */

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/mptcp.h

index 8b5af68..3236010 100644 (file)
@@ -58,10 +58,6 @@ struct mptcp_addr_info {
 struct mptcp_out_options {
 #if IS_ENABLED(CONFIG_MPTCP)
        u16 suboptions;
-       u64 sndr_key;
-       u64 rcvr_key;
-       u64 ahmac;
-       struct mptcp_addr_info addr;
        struct mptcp_rm_list rm_list;
        u8 join_id;
        u8 backup;
@@ -69,11 +65,23 @@ struct mptcp_out_options {
           reset_transient:1,
           csum_reqd:1,
           allow_join_id0:1;
-       u32 nonce;
-       u64 thmac;
-       u32 token;
-       u8 hmac[20];
-       struct mptcp_ext ext_copy;
+       union {
+               struct {
+                       u64 sndr_key;
+                       u64 rcvr_key;
+               };
+               struct {
+                       struct mptcp_addr_info addr;
+                       u64 ahmac;
+               };
+               struct mptcp_ext ext_copy;
+               struct {
+                       u32 nonce;
+                       u32 token;
+                       u64 thmac;
+                       u8 hmac[20];
+               };
+       };
 #endif
 };