Subject: Re: SCTP control socket question

From: "Denis V. Lunev" <[email-masked]>
Date: Thu, 27 Mar 2008 16:43:25 +0300

On Thu, 2008-03-27 at 09:15 -0400, Vlad Yasevich wrote:
> Denis V. Lunev wrote:
> > On Thu, 2008-03-27 at 08:48 -0400, Vlad Yasevich wrote:
> >> Denis V. Lunev wrote:
> >>> Hello, Vlad!
> >>>
> >>> I have read SCTP sources and found that SCTP control socket
> >>> (sctp_ctl_socket) remains hashed unlike similar staff in UDP/TCP etc.
> >>>
> >>> Am I wrong, that it should not be hashed or not?
> >> Why do you believe that the socket is hashed?  That socket is only
> >> allocated and referenced.  It's should not be in any hash tables
> >> since we hold a global reference on it.
> > 
> > sctp_ctl_sock_init
> >   __sock_create
> >     inet(6)_create
> >         sk->sk_prot->hash(sk);
> > 
> > For this purpose sk->sk_prot->unhash is explicitly called for ICMP/TCP
> > etc cases.
> > 
> > Regards,
> > 	Den
> > 
> 
> Ahhh...  ;-)
> 
> struct proto sctp_prot = {
> ...
> 	.hash        =  sctp_hash,
> ...
> }
> 
> static void sctp_hash(struct sock *sk)
> {
>         /* STUB */
> }
> 
> 
> SCTP currently does't do any hashing on the sockets.  It hashes SCTP structures
> that live under the socket.

will you mind against this?
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index 5aea911..8d1b2bc 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -680,16 +680,13 @@ static int sctp_ctl_sock_init(void)
 	else
 		family = PF_INET;
 
-	err = sock_create_kern(family, SOCK_SEQPACKET, IPPROTO_SCTP,
-			       &sctp_ctl_socket);
+	err = inet_csk_ctl_sock_create(&sctp_ctl_socket, 
+				       family, SOCK_SEQPACKET, IPPROTO_SCTP);
 	if (err < 0) {
 		printk(KERN_ERR
 		       "SCTP: Failed to create the SCTP control socket.\n");
 		return err;
 	}
-	sctp_ctl_socket->sk->sk_allocation = GFP_ATOMIC;
-	inet_sk(sctp_ctl_socket->sk)->uc_ttl = -1;
-
 	return 0;
 }