diff options
Diffstat (limited to 'net/tipc/port.c')
-rw-r--r-- | net/tipc/port.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/net/tipc/port.c b/net/tipc/port.c index 07c42fba672b..18098cac62f2 100644 --- a/net/tipc/port.c +++ b/net/tipc/port.c | |||
@@ -726,7 +726,7 @@ static void port_dispatcher_sigh(void *dummy) | |||
726 | if (unlikely(!cb)) | 726 | if (unlikely(!cb)) |
727 | goto reject; | 727 | goto reject; |
728 | if (unlikely(!connected)) { | 728 | if (unlikely(!connected)) { |
729 | if (tipc_connect2port(dref, &orig)) | 729 | if (tipc_connect(dref, &orig)) |
730 | goto reject; | 730 | goto reject; |
731 | } else if (peer_invalid) | 731 | } else if (peer_invalid) |
732 | goto reject; | 732 | goto reject; |
@@ -1036,15 +1036,30 @@ int tipc_withdraw(u32 ref, unsigned int scope, struct tipc_name_seq const *seq) | |||
1036 | return res; | 1036 | return res; |
1037 | } | 1037 | } |
1038 | 1038 | ||
1039 | int tipc_connect2port(u32 ref, struct tipc_portid const *peer) | 1039 | int tipc_connect(u32 ref, struct tipc_portid const *peer) |
1040 | { | 1040 | { |
1041 | struct tipc_port *p_ptr; | 1041 | struct tipc_port *p_ptr; |
1042 | struct tipc_msg *msg; | 1042 | int res; |
1043 | int res = -EINVAL; | ||
1044 | 1043 | ||
1045 | p_ptr = tipc_port_lock(ref); | 1044 | p_ptr = tipc_port_lock(ref); |
1046 | if (!p_ptr) | 1045 | if (!p_ptr) |
1047 | return -EINVAL; | 1046 | return -EINVAL; |
1047 | res = __tipc_connect(ref, p_ptr, peer); | ||
1048 | tipc_port_unlock(p_ptr); | ||
1049 | return res; | ||
1050 | } | ||
1051 | |||
1052 | /* | ||
1053 | * __tipc_connect - connect to a remote peer | ||
1054 | * | ||
1055 | * Port must be locked. | ||
1056 | */ | ||
1057 | int __tipc_connect(u32 ref, struct tipc_port *p_ptr, | ||
1058 | struct tipc_portid const *peer) | ||
1059 | { | ||
1060 | struct tipc_msg *msg; | ||
1061 | int res = -EINVAL; | ||
1062 | |||
1048 | if (p_ptr->published || p_ptr->connected) | 1063 | if (p_ptr->published || p_ptr->connected) |
1049 | goto exit; | 1064 | goto exit; |
1050 | if (!peer->ref) | 1065 | if (!peer->ref) |
@@ -1067,17 +1082,16 @@ int tipc_connect2port(u32 ref, struct tipc_portid const *peer) | |||
1067 | (net_ev_handler)port_handle_node_down); | 1082 | (net_ev_handler)port_handle_node_down); |
1068 | res = 0; | 1083 | res = 0; |
1069 | exit: | 1084 | exit: |
1070 | tipc_port_unlock(p_ptr); | ||
1071 | p_ptr->max_pkt = tipc_link_get_max_pkt(peer->node, ref); | 1085 | p_ptr->max_pkt = tipc_link_get_max_pkt(peer->node, ref); |
1072 | return res; | 1086 | return res; |
1073 | } | 1087 | } |
1074 | 1088 | ||
1075 | /** | 1089 | /* |
1076 | * tipc_disconnect_port - disconnect port from peer | 1090 | * __tipc_disconnect - disconnect port from peer |
1077 | * | 1091 | * |
1078 | * Port must be locked. | 1092 | * Port must be locked. |
1079 | */ | 1093 | */ |
1080 | int tipc_disconnect_port(struct tipc_port *tp_ptr) | 1094 | int __tipc_disconnect(struct tipc_port *tp_ptr) |
1081 | { | 1095 | { |
1082 | int res; | 1096 | int res; |
1083 | 1097 | ||
@@ -1104,7 +1118,7 @@ int tipc_disconnect(u32 ref) | |||
1104 | p_ptr = tipc_port_lock(ref); | 1118 | p_ptr = tipc_port_lock(ref); |
1105 | if (!p_ptr) | 1119 | if (!p_ptr) |
1106 | return -EINVAL; | 1120 | return -EINVAL; |
1107 | res = tipc_disconnect_port(p_ptr); | 1121 | res = __tipc_disconnect(p_ptr); |
1108 | tipc_port_unlock(p_ptr); | 1122 | tipc_port_unlock(p_ptr); |
1109 | return res; | 1123 | return res; |
1110 | } | 1124 | } |