Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7668c72 authored by Sunil Mushran's avatar Sunil Mushran Committed by Mark Fasheh
Browse files

[PATCH] ocfs2: added source addr to bind() in o2net_start_connect()



to prevent confusion when a virtual ip is created on the same interface

Signed-off-by: default avatarSunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent 110ba908
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -1318,7 +1318,7 @@ static void o2net_start_connect(void *arg)
{
{
	struct o2net_node *nn = arg;
	struct o2net_node *nn = arg;
	struct o2net_sock_container *sc = NULL;
	struct o2net_sock_container *sc = NULL;
	struct o2nm_node *node = NULL;
	struct o2nm_node *node = NULL, *mynode = NULL;
	struct socket *sock = NULL;
	struct socket *sock = NULL;
	struct sockaddr_in myaddr = {0, }, remoteaddr = {0, };
	struct sockaddr_in myaddr = {0, }, remoteaddr = {0, };
	int ret = 0;
	int ret = 0;
@@ -1334,6 +1334,12 @@ static void o2net_start_connect(void *arg)
		goto out;
		goto out;
	}
	}


	mynode = o2nm_get_node_by_num(o2nm_this_node());
	if (mynode == NULL) {
		ret = 0;
		goto out;
	}

	spin_lock(&nn->nn_lock);
	spin_lock(&nn->nn_lock);
	/* see if we already have one pending or have given up */
	/* see if we already have one pending or have given up */
	if (nn->nn_sc || nn->nn_persistent_error)
	if (nn->nn_sc || nn->nn_persistent_error)
@@ -1361,12 +1367,14 @@ static void o2net_start_connect(void *arg)
	sock->sk->sk_allocation = GFP_ATOMIC;
	sock->sk->sk_allocation = GFP_ATOMIC;


	myaddr.sin_family = AF_INET;
	myaddr.sin_family = AF_INET;
	myaddr.sin_addr.s_addr = (__force u32)mynode->nd_ipv4_address;
	myaddr.sin_port = (__force u16)htons(0); /* any port */
	myaddr.sin_port = (__force u16)htons(0); /* any port */


	ret = sock->ops->bind(sock, (struct sockaddr *)&myaddr,
	ret = sock->ops->bind(sock, (struct sockaddr *)&myaddr,
			      sizeof(myaddr));
			      sizeof(myaddr));
	if (ret) {
	if (ret) {
		mlog(0, "bind failed: %d\n", ret);
		mlog(ML_ERROR, "bind failed with %d at address %u.%u.%u.%u\n",
		     ret, NIPQUAD(mynode->nd_ipv4_address));
		goto out;
		goto out;
	}
	}


@@ -1407,6 +1415,8 @@ out:
		sc_put(sc);
		sc_put(sc);
	if (node)
	if (node)
		o2nm_node_put(node);
		o2nm_node_put(node);
	if (mynode)
		o2nm_node_put(mynode);


	return;
	return;
}
}