Re: linux-next: manual merge of the net-next tree with the net tree
From: Matthieu Baerts <hidden>
Date: 2023-08-21 12:09:46
Also in:
linux-next, lkml
Hi Stephen, On 21/08/2023 03:06, Stephen Rothwell wrote:
Hi all,
Today's linux-next merge of the net-next tree got a conflict in:
include/net/inet_sock.h
between commit:
f866fbc842de ("ipv4: fix data-races around inet->inet_id")
from the net tree and commit:
c274af224269 ("inet: introduce inet->inet_flags")
from the net-next tree.Thank you for this conflict resolution! I had the same issue on our side with MPTCP tree when syncing -net and net-next and I resolved it a bit differently. Here my comment on the patch you used:
quoted hunk ↗ jump to hunk
diff --cc include/net/inet_sock.h index 491ceb7ebe5d,acbb93d7607a..000000000000--- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h@@@ -218,12 -218,12 +218,12 @@@ struct inet_sock #define inet_dport sk.__sk_common.skc_dport #define inet_num sk.__sk_common.skc_num + unsigned long inet_flags; __be32 inet_saddr; __s16 uc_ttl; - __u16 cmsg_flags; - struct ip_options_rcu __rcu *inet_opt; - atomic_t inet_id; __be16 inet_sport; ++ atomic_t inet_id; + struct ip_options_rcu __rcu *inet_opt;
I first put "inet_opt", then "inet_id" here to avoid a hole of 4 bytes. So just switching these two lines. Here is the output of pahole when using your patch:
struct inet_sock {
struct sock sk __attribute__((__aligned__(8))); /* 0 768 */
/* --- cacheline 12 boundary (768 bytes) --- */
struct ipv6_pinfo * pinet6; /* 768 8 */
long unsigned int inet_flags; /* 776 8 */
__be32 inet_saddr; /* 784 4 */
__s16 uc_ttl; /* 788 2 */
__be16 inet_sport; /* 790 2 */
atomic_t inet_id; /* 792 4 */
/* XXX 4 bytes hole, try to pack */
struct ip_options_rcu * inet_opt; /* 800 8 */
__u8 tos; /* 808 1 */
__u8 min_ttl; /* 809 1 */
__u8 mc_ttl; /* 810 1 */
__u8 pmtudisc; /* 811 1 */
__u8 rcv_tos; /* 812 1 */
__u8 convert_csum; /* 813 1 */
/* XXX 2 bytes hole, try to pack */
int uc_index; /* 816 4 */
int mc_index; /* 820 4 */
__be32 mc_addr; /* 824 4 */And now when "inet_id" is placed after "inet_opt":
struct inet_sock {
struct sock sk __attribute__((__aligned__(8))); /* 0 768 */
/* --- cacheline 12 boundary (768 bytes) --- */
struct ipv6_pinfo * pinet6; /* 768 8 */
long unsigned int inet_flags; /* 776 8 */
__be32 inet_saddr; /* 784 4 */
__s16 uc_ttl; /* 788 2 */
__be16 inet_sport; /* 790 2 */
struct ip_options_rcu * inet_opt; /* 792 8 */
atomic_t inet_id; /* 800 4 */
__u8 tos; /* 804 1 */
__u8 min_ttl; /* 805 1 */
__u8 mc_ttl; /* 806 1 */
__u8 pmtudisc; /* 807 1 */
__u8 rcv_tos; /* 808 1 */
__u8 convert_csum; /* 809 1 */
/* XXX 2 bytes hole, try to pack */
int uc_index; /* 812 4 */
int mc_index; /* 816 4 */
__be32 mc_addr; /* 820 4 */
I noticed that in Eric's patch for the net tree -- f866fbc842de ("ipv4:
fix data-races around inet->inet_id") -- he moved "inet_id" above, I
guess for a similar reason.
Just in case you are interested by taking my version, I attached the
patch I used and the Rerere cache is available there:
https://github.com/multipath-tcp/mptcp-upstream-rr-cache/commit/e63f34f8
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net Attachments
- 47fe53ec8c3d4381989f0541eb0a0abd31b8cbee.patch [text/x-patch] 548 bytes · preview