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 | } |
