clean up tcp_sk(), 2.6.0
Subsystems (4)
PATCH 1/1 clean up tcp_sk(), 2.6.0
i recently wasted a few hours on a bug where i used "tcp_sk(sock)" instead of "tcp_sk(sock->sk)" - the former, while being blatantly incorrect, compiles just fine on 2.6.0. The patch below is equivalent to the define but is also type-safe. Compiles cleanly & boots fine on 2.6.0.
Ingo
include/linux/tcp.h renamed from include/linux/tcp.h.orig +4 -1
@@ -386,7 +386,10 @@ struct tcp_sock { struct tcp_opt tcp; }; -#define tcp_sk (__sk) (&((struct tcp_sock *)__sk)->tcp) +static inline struct tcp_opt *tcp_sk (const struct sock *__sk) +{ +return &((struct tcp_sock *)__sk)->tcp; +}#endif
Em Tue, Dec 30, 2003 at 05:32:30PM +0100, Ingo Molnar escreveu:
Quoted 6 lines
i recently wasted a few hours on a bug where i used "
tcp_sk(sock)" instead of "tcp_sk(sock->sk)" - the former, while being blatantly incorrect, compiles just fine on 2.6.0. The patch below is equivalent to the define but is also type-safe. Compiles cleanly & boots fine on 2.6.0.
Don't have a problem, but then it'd be nice to do this for udp_sk, raw_sk, etc, etc :)
- Arnaldo
In article <[email protected]> (at Tue, 30 Dec 2003 17:32:30 +0100), Ingo Molnar <[email protected]> says:
Quoted 3 lines
incorrect, compiles just fine on 2.6.0. The patch below is equivalent to the define but is also type-safe. Compiles cleanly & boots fine on 2.6.0.
:
include/linux/tcp.h struct tcp_sock { · line 392
Quoted 6 lines
include/linux/tcp.h renamed from include/linux/tcp.h.orig +4
-1-#define tcp_sk (__sk) (&((struct tcp_sock *)__sk)->tcp) +static inline struct tcp_opt *tcp_sk (const struct sock *__sk) +{ +return &((struct tcp_sock *)__sk)->tcp; +}
You probably want to convert other similar things such as inet_sk(), inet6_sk() etc. :-)
Signature · 2 lines
Hideaki YOSHIFUJI @ USAGI Project <[email protected]> GPG FP: 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA
David S. Miller
AppliedQuoted 5 lines · On Tue, 30 Dec 2003 17:32:30 +0100 Ingo Molnar <[email protected]> wrote:
i recently wasted a few hours on a bug where i used "
tcp_sk(sock)" instead of "tcp_sk(sock->sk)" - the former, while being blatantly incorrect, compiles just fine on 2.6.0. The patch below is equivalent to the define but is also type-safe. Compiles cleanly & boots fine on 2.6.0.
Applied, and I'll happily accept patches for udp_sk() and all the other ones too :)
Quoted 11 lines · David S. Miller
Quoted 5 lines · On Tue, 30 Dec 2003 17:32:30 +0100 Ingo Molnar <[email protected]> wrote:
i recently wasted a few hours on a bug where i used "
tcp_sk(sock)" instead of "tcp_sk(sock->sk)" - the former, while being blatantly incorrect, compiles just fine on 2.6.0. The patch below is equivalent to the define but is also type-safe. Compiles cleanly & boots fine on 2.6.0.Applied, and I'll happily accept patches for
udp_sk()and all the other ones too :)
sure - patch for udp_sk, inet6_sk/raw6_sk and inet_sk attached. Compiles cleanly and boots. The inet_sk one uncovered a couple of other bugs in my code. (The other defines for protocol-private sockets seem to be safe because they all use ->sk_protinfo which forces the type.)
Ingo
include/linux/udp.h renamed from include/linux/udp.h.orig +4 -1
@@ -60,7 +60,10 @@ struct udp_sock { struct udp_opt udp; }; -#define udp_sk (__sk) (&((struct udp_sock *)__sk)->udp) +static inline struct udp_opt *udp_sk (const struct sock *__sk) +{ +return &((struct udp_sock *)__sk)->udp; +}#endif
include/linux/ipv6.h renamed from include/linux/ipv6.h.orig +9 -2
@@ -270,8 +270,15 @@ struct tcp6_sock {struct ipv6_pinfo inet6; }; -#define inet6_sk (__sk) ((struct raw6_sock *)__sk)->pinet6 -#define raw6_sk (__sk) (&((struct raw6_sock *)__sk)->raw6) +static inline struct ipv6_pinfo *inet6_sk (const struct sock *__sk) +{ +return ((struct raw6_sock *)__sk)->pinet6; +} + +static inline struct raw6_opt *raw6_sk (const struct sock *__sk) +{ +return &((struct raw6_sock *)__sk)->raw6; +}#if defined(CONFIG_IPV6 ) || defined(CONFIG_IPV6_MODULE )#define __ipv6_only_sock (sk) (inet6_sk(sk)->ipv6only)
include/linux/ip.h renamed from include/linux/ip.h.orig +4 -1
@@ -159,7 +159,10 @@ struct inet_sock { struct inet_opt inet; }; -#define inet_sk (__sk) (&((struct inet_sock *)__sk)->inet) +static inline struct inet_opt *inet_sk (const struct sock *__sk) +{ +return &((struct inet_sock *)__sk)->inet; +}#endif