[Linux-cluster] [PATCH] release sock in tcp_connect_to_sock of dlm if dlm_nodeid_to_addr returns error

Christine Caulfield ccaulfie at redhat.com
Fri Jun 27 13:22:36 UTC 2008


Masatake YAMATO wrote:
> Hi,
> 
> (I submitted to this patch to cluster-devel. However, none has interest
>  to my post. So I'll submit it here again.)
> 
> It seems that `sock' allocated by sock_create_kern
> in tcp_connect_to_sock() of dlm/fs/lowcomms.c is not released if
> dlm_nodeid_to_addr an error.
> 
> 
> 
>     static void tcp_connect_to_sock(struct connection *con)
>     {
>     ...
> 
> 	result = sock_create_kern(dlm_local_addr[0]->ss_family, SOCK_STREAM,
> 				  IPPROTO_TCP, &sock);
> 	if (result < 0)
> 		goto out_err;
> 
> 	memset(&saddr, 0, sizeof(saddr));
> 	if (dlm_nodeid_to_addr(con->nodeid, &saddr)) {
> 		sock_release(sock);
> 		goto out_err;
> 	}
> 
> 	...
> 
>     out_err:
> 	    if (con->sock) {
> 		    sock_release(con->sock);
> 		    con->sock = NULL;
> 	    }
> 
> 
> Signed-off-by: Masatake YAMATO <yamato at redhat.com>
> 
> diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
> index 637018c..3962262 100644
> --- a/fs/dlm/lowcomms.c
> +++ b/fs/dlm/lowcomms.c
> @@ -891,8 +891,10 @@ static void tcp_connect_to_sock(struct connection *con)
>  		goto out_err;
>  
>  	memset(&saddr, 0, sizeof(saddr));
> -	if (dlm_nodeid_to_addr(con->nodeid, &saddr))
> +	if (dlm_nodeid_to_addr(con->nodeid, &saddr)) {
> +		sock_release(sock);
>  		goto out_err;
> +	}
>  
>  	sock->sk->sk_user_data = con;
>  	con->rx_action = receive_from_sock;


That looks good to me. Thanks.

Can you commit this please Dave?

-- 

Chrissie




More information about the Linux-cluster mailing list