On Wed, May 29, 2019 at 05:39:41PM +0200, Matteo Croce wrote: > The same skb_checksum_ops struct is defined twice in two different places, > leading to code duplication. Declare it as a global variable into a common > header instead of allocating it on the stack on each function call. > bloat-o-meter reports a slight code shrink. > > add/remove: 1/1 grow/shrink: 0/10 up/down: 128/-1282 (-1154) > Function old new delta > sctp_csum_ops - 128 +128 > crc32c_csum_ops 16 - -16 > sctp_rcv 6616 6583 -33 > sctp_packet_pack 4542 4504 -38 > nf_conntrack_sctp_packet 4980 4926 -54 > execute_masked_set_action 6453 6389 -64 > tcf_csum_sctp 575 428 -147 > sctp_gso_segment 1292 1126 -166 > sctp_csum_check 579 412 -167 > sctp_snat_handler 957 772 -185 > sctp_dnat_handler 1321 1132 -189 > l4proto_manip_pkt 2536 2313 -223 > Total: Before=359297613, After=359296459, chg -0.00% > > Reviewed-by: Xin Long <lucien.xin@xxxxxxxxx> > Signed-off-by: Matteo Croce <mcroce@xxxxxxxxxx> > --- > include/net/sctp/checksum.h | 12 +++++++----- > net/sctp/offload.c | 7 +------ > 2 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h > index 314699333bec..5a9bb09f32b6 100644 > --- a/include/net/sctp/checksum.h > +++ b/include/net/sctp/checksum.h > @@ -43,19 +43,21 @@ static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2, > (__force __u32)csum2, len); > } > > +static const struct skb_checksum_ops sctp_csum_ops = { > + .update = sctp_csum_update, > + .combine = sctp_csum_combine, > +}; > + > static inline __le32 sctp_compute_cksum(const struct sk_buff *skb, > unsigned int offset) > { > struct sctphdr *sh = (struct sctphdr *)(skb->data + offset); > - const struct skb_checksum_ops ops = { > - .update = sctp_csum_update, > - .combine = sctp_csum_combine, > - }; > __le32 old = sh->checksum; > __wsum new; > > sh->checksum = 0; > - new = ~__skb_checksum(skb, offset, skb->len - offset, ~(__wsum)0, &ops); > + new = ~__skb_checksum(skb, offset, skb->len - offset, ~(__wsum)0, > + &sctp_csum_ops); > sh->checksum = old; > > return cpu_to_le32((__force __u32)new); > diff --git a/net/sctp/offload.c b/net/sctp/offload.c > index edfcf16e704c..dac46dfadab5 100644 > --- a/net/sctp/offload.c > +++ b/net/sctp/offload.c > @@ -103,11 +103,6 @@ static const struct net_offload sctp6_offload = { > }, > }; > > -static const struct skb_checksum_ops crc32c_csum_ops = { > - .update = sctp_csum_update, > - .combine = sctp_csum_combine, > -}; > - > int __init sctp_offload_init(void) > { > int ret; > @@ -120,7 +115,7 @@ int __init sctp_offload_init(void) > if (ret) > goto ipv4; > > - crc32c_csum_stub = &crc32c_csum_ops; > + crc32c_csum_stub = &sctp_csum_ops; > return ret; > > ipv4: > -- > 2.21.0 > > Acked-by: Neil Horman <nhorman@xxxxxxxxxxxxx>