diff mbox series

[net-next,02/11] sock: Make sk_protocol a 16-bit value

Message ID 20191213230022.28144-3-mathew.j.martineau@linux.intel.com
State Deferred, archived
Headers show
Series Multipath TCP: Prerequisites | expand

Commit Message

Mat Martineau Dec. 13, 2019, 11 p.m. UTC
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(-)

Comments

Eric Dumazet Dec. 13, 2019, 11:16 p.m. UTC | #1
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())
Mat Martineau Dec. 14, 2019, 12:06 a.m. UTC | #2
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 mbox series

Patch

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)