Message ID | 20191213230022.28144-3-mathew.j.martineau@linux.intel.com |
---|---|
State | Deferred, archived |
Headers | show |
Series | Multipath TCP: Prerequisites | expand |
On 12/13/19 3:00 PM, Mat Martineau wrote: > Match the 16-bit width of skbuff->protocol. Fills an 8-bit hole so > sizeof(struct sock) does not change. > > Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> > --- > include/net/sock.h | 4 ++-- > include/trace/events/sock.h | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/include/net/sock.h b/include/net/sock.h > index 81dc811aad2e..9dd225f62012 100644 > --- a/include/net/sock.h > +++ b/include/net/sock.h > @@ -456,10 +456,10 @@ struct sock { > sk_no_check_tx : 1, > sk_no_check_rx : 1, > sk_userlocks : 4, > - sk_protocol : 8, > + sk_pacing_shift : 8, > sk_type : 16; > + u16 sk_protocol; > u16 sk_gso_max_segs; > - u8 sk_pacing_shift; Unfortunately sk_pacing_shift must not be a bit field. I have a patch to add proper READ_ONCE()/WRITE_ONCE() on it, since an update can be done from a lockless context ( sk_pacing_shift_update())
On Fri, 13 Dec 2019, Eric Dumazet wrote: > > > On 12/13/19 3:00 PM, Mat Martineau wrote: >> Match the 16-bit width of skbuff->protocol. Fills an 8-bit hole so >> sizeof(struct sock) does not change. >> >> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> >> --- >> include/net/sock.h | 4 ++-- >> include/trace/events/sock.h | 2 +- >> 2 files changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/include/net/sock.h b/include/net/sock.h >> index 81dc811aad2e..9dd225f62012 100644 >> --- a/include/net/sock.h >> +++ b/include/net/sock.h >> @@ -456,10 +456,10 @@ struct sock { >> sk_no_check_tx : 1, >> sk_no_check_rx : 1, >> sk_userlocks : 4, >> - sk_protocol : 8, >> + sk_pacing_shift : 8, >> sk_type : 16; >> + u16 sk_protocol; >> u16 sk_gso_max_segs; >> - u8 sk_pacing_shift; > > Unfortunately sk_pacing_shift must not be a bit field. > > I have a patch to add proper READ_ONCE()/WRITE_ONCE() on it, > since an update can be done from a lockless context ( sk_pacing_shift_update()) Ok, thanks for noting this. I'll remove the change to sk_pacing_shift. -- Mat Martineau Intel
diff --git a/include/net/sock.h b/include/net/sock.h index 81dc811aad2e..9dd225f62012 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -456,10 +456,10 @@ struct sock { sk_no_check_tx : 1, sk_no_check_rx : 1, sk_userlocks : 4, - sk_protocol : 8, + sk_pacing_shift : 8, sk_type : 16; + u16 sk_protocol; u16 sk_gso_max_segs; - u8 sk_pacing_shift; unsigned long sk_lingertime; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; diff --git a/include/trace/events/sock.h b/include/trace/events/sock.h index 51fe9f6719eb..3ff12b90048d 100644 --- a/include/trace/events/sock.h +++ b/include/trace/events/sock.h @@ -147,7 +147,7 @@ TRACE_EVENT(inet_sock_set_state, __field(__u16, sport) __field(__u16, dport) __field(__u16, family) - __field(__u8, protocol) + __field(__u16, protocol) __array(__u8, saddr, 4) __array(__u8, daddr, 4) __array(__u8, saddr_v6, 16)
Match the 16-bit width of skbuff->protocol. Fills an 8-bit hole so sizeof(struct sock) does not change. Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> --- include/net/sock.h | 4 ++-- include/trace/events/sock.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)