diff options
Diffstat (limited to 'fs/ocfs2/cluster/tcp.c')
-rw-r--r-- | fs/ocfs2/cluster/tcp.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index aa75ca3f78da..9aa426e42123 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c | |||
@@ -977,7 +977,7 @@ static int o2net_tx_can_proceed(struct o2net_node *nn, | |||
977 | int o2net_send_message_vec(u32 msg_type, u32 key, struct kvec *caller_vec, | 977 | int o2net_send_message_vec(u32 msg_type, u32 key, struct kvec *caller_vec, |
978 | size_t caller_veclen, u8 target_node, int *status) | 978 | size_t caller_veclen, u8 target_node, int *status) |
979 | { | 979 | { |
980 | int ret; | 980 | int ret = 0; |
981 | struct o2net_msg *msg = NULL; | 981 | struct o2net_msg *msg = NULL; |
982 | size_t veclen, caller_bytes = 0; | 982 | size_t veclen, caller_bytes = 0; |
983 | struct kvec *vec = NULL; | 983 | struct kvec *vec = NULL; |
@@ -1696,6 +1696,9 @@ static void o2net_hb_node_down_cb(struct o2nm_node *node, int node_num, | |||
1696 | { | 1696 | { |
1697 | o2quo_hb_down(node_num); | 1697 | o2quo_hb_down(node_num); |
1698 | 1698 | ||
1699 | if (!node) | ||
1700 | return; | ||
1701 | |||
1699 | if (node_num != o2nm_this_node()) | 1702 | if (node_num != o2nm_this_node()) |
1700 | o2net_disconnect_node(node); | 1703 | o2net_disconnect_node(node); |
1701 | 1704 | ||
@@ -1709,6 +1712,8 @@ static void o2net_hb_node_up_cb(struct o2nm_node *node, int node_num, | |||
1709 | 1712 | ||
1710 | o2quo_hb_up(node_num); | 1713 | o2quo_hb_up(node_num); |
1711 | 1714 | ||
1715 | BUG_ON(!node); | ||
1716 | |||
1712 | /* ensure an immediate connect attempt */ | 1717 | /* ensure an immediate connect attempt */ |
1713 | nn->nn_last_connect_attempt = jiffies - | 1718 | nn->nn_last_connect_attempt = jiffies - |
1714 | (msecs_to_jiffies(o2net_reconnect_delay()) + 1); | 1719 | (msecs_to_jiffies(o2net_reconnect_delay()) + 1); |
@@ -1759,6 +1764,7 @@ static int o2net_accept_one(struct socket *sock) | |||
1759 | struct sockaddr_in sin; | 1764 | struct sockaddr_in sin; |
1760 | struct socket *new_sock = NULL; | 1765 | struct socket *new_sock = NULL; |
1761 | struct o2nm_node *node = NULL; | 1766 | struct o2nm_node *node = NULL; |
1767 | struct o2nm_node *local_node = NULL; | ||
1762 | struct o2net_sock_container *sc = NULL; | 1768 | struct o2net_sock_container *sc = NULL; |
1763 | struct o2net_node *nn; | 1769 | struct o2net_node *nn; |
1764 | 1770 | ||
@@ -1796,11 +1802,15 @@ static int o2net_accept_one(struct socket *sock) | |||
1796 | goto out; | 1802 | goto out; |
1797 | } | 1803 | } |
1798 | 1804 | ||
1799 | if (o2nm_this_node() > node->nd_num) { | 1805 | if (o2nm_this_node() >= node->nd_num) { |
1800 | mlog(ML_NOTICE, "unexpected connect attempted from a lower " | 1806 | local_node = o2nm_get_node_by_num(o2nm_this_node()); |
1801 | "numbered node '%s' at " "%pI4:%d with num %u\n", | 1807 | mlog(ML_NOTICE, "unexpected connect attempt seen at node '%s' (" |
1802 | node->nd_name, &sin.sin_addr.s_addr, | 1808 | "%u, %pI4:%d) from node '%s' (%u, %pI4:%d)\n", |
1803 | ntohs(sin.sin_port), node->nd_num); | 1809 | local_node->nd_name, local_node->nd_num, |
1810 | &(local_node->nd_ipv4_address), | ||
1811 | ntohs(local_node->nd_ipv4_port), | ||
1812 | node->nd_name, node->nd_num, &sin.sin_addr.s_addr, | ||
1813 | ntohs(sin.sin_port)); | ||
1804 | ret = -EINVAL; | 1814 | ret = -EINVAL; |
1805 | goto out; | 1815 | goto out; |
1806 | } | 1816 | } |
@@ -1857,6 +1867,8 @@ out: | |||
1857 | sock_release(new_sock); | 1867 | sock_release(new_sock); |
1858 | if (node) | 1868 | if (node) |
1859 | o2nm_node_put(node); | 1869 | o2nm_node_put(node); |
1870 | if (local_node) | ||
1871 | o2nm_node_put(local_node); | ||
1860 | if (sc) | 1872 | if (sc) |
1861 | sc_put(sc); | 1873 | sc_put(sc); |
1862 | return ret; | 1874 | return ret; |