[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