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

[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
...@@ -1318,7 +1318,7 @@ static void o2net_start_connect(void *arg) ...@@ -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) ...@@ -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) ...@@ -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 @@ static void o2net_start_connect(void *arg) ...@@ -1407,6 +1415,8 @@ static void o2net_start_connect(void *arg)
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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment