diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/port.c | 32 | ||||
-rw-r--r-- | net/tipc/port.h | 6 | ||||
-rw-r--r-- | net/tipc/socket.c | 6 | ||||
-rw-r--r-- | net/tipc/subscr.c | 2 |
4 files changed, 31 insertions, 15 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 | } |
diff --git a/net/tipc/port.h b/net/tipc/port.h index 4660e3065790..fb66e2e5f4d1 100644 --- a/net/tipc/port.h +++ b/net/tipc/port.h | |||
@@ -190,7 +190,7 @@ int tipc_publish(u32 portref, unsigned int scope, | |||
190 | int tipc_withdraw(u32 portref, unsigned int scope, | 190 | int tipc_withdraw(u32 portref, unsigned int scope, |
191 | struct tipc_name_seq const *name_seq); | 191 | struct tipc_name_seq const *name_seq); |
192 | 192 | ||
193 | int tipc_connect2port(u32 portref, struct tipc_portid const *port); | 193 | int tipc_connect(u32 portref, struct tipc_portid const *port); |
194 | 194 | ||
195 | int tipc_disconnect(u32 portref); | 195 | int tipc_disconnect(u32 portref); |
196 | 196 | ||
@@ -200,7 +200,9 @@ int tipc_shutdown(u32 ref); | |||
200 | /* | 200 | /* |
201 | * The following routines require that the port be locked on entry | 201 | * The following routines require that the port be locked on entry |
202 | */ | 202 | */ |
203 | int tipc_disconnect_port(struct tipc_port *tp_ptr); | 203 | int __tipc_disconnect(struct tipc_port *tp_ptr); |
204 | int __tipc_connect(u32 ref, struct tipc_port *p_ptr, | ||
205 | struct tipc_portid const *peer); | ||
204 | int tipc_port_peer_msg(struct tipc_port *p_ptr, struct tipc_msg *msg); | 206 | int tipc_port_peer_msg(struct tipc_port *p_ptr, struct tipc_msg *msg); |
205 | 207 | ||
206 | /* | 208 | /* |
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index f553fdecc1d2..b630f3839ca3 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -783,7 +783,7 @@ static int auto_connect(struct socket *sock, struct tipc_msg *msg) | |||
783 | 783 | ||
784 | tsock->peer_name.ref = msg_origport(msg); | 784 | tsock->peer_name.ref = msg_origport(msg); |
785 | tsock->peer_name.node = msg_orignode(msg); | 785 | tsock->peer_name.node = msg_orignode(msg); |
786 | tipc_connect2port(tsock->p->ref, &tsock->peer_name); | 786 | tipc_connect(tsock->p->ref, &tsock->peer_name); |
787 | tipc_set_portimportance(tsock->p->ref, msg_importance(msg)); | 787 | tipc_set_portimportance(tsock->p->ref, msg_importance(msg)); |
788 | sock->state = SS_CONNECTED; | 788 | sock->state = SS_CONNECTED; |
789 | return 0; | 789 | return 0; |
@@ -1246,7 +1246,7 @@ static u32 filter_rcv(struct sock *sk, struct sk_buff *buf) | |||
1246 | /* Initiate connection termination for an incoming 'FIN' */ | 1246 | /* Initiate connection termination for an incoming 'FIN' */ |
1247 | if (unlikely(msg_errcode(msg) && (sock->state == SS_CONNECTED))) { | 1247 | if (unlikely(msg_errcode(msg) && (sock->state == SS_CONNECTED))) { |
1248 | sock->state = SS_DISCONNECTING; | 1248 | sock->state = SS_DISCONNECTING; |
1249 | tipc_disconnect_port(tipc_sk_port(sk)); | 1249 | __tipc_disconnect(tipc_sk_port(sk)); |
1250 | } | 1250 | } |
1251 | 1251 | ||
1252 | sk->sk_data_ready(sk, 0); | 1252 | sk->sk_data_ready(sk, 0); |
@@ -1506,7 +1506,7 @@ static int accept(struct socket *sock, struct socket *new_sock, int flags) | |||
1506 | /* Connect new socket to it's peer */ | 1506 | /* Connect new socket to it's peer */ |
1507 | new_tsock->peer_name.ref = msg_origport(msg); | 1507 | new_tsock->peer_name.ref = msg_origport(msg); |
1508 | new_tsock->peer_name.node = msg_orignode(msg); | 1508 | new_tsock->peer_name.node = msg_orignode(msg); |
1509 | tipc_connect2port(new_ref, &new_tsock->peer_name); | 1509 | tipc_connect(new_ref, &new_tsock->peer_name); |
1510 | new_sock->state = SS_CONNECTED; | 1510 | new_sock->state = SS_CONNECTED; |
1511 | 1511 | ||
1512 | tipc_set_portimportance(new_ref, msg_importance(msg)); | 1512 | tipc_set_portimportance(new_ref, msg_importance(msg)); |
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c index 0f7d0d007e22..6b42d47029af 100644 --- a/net/tipc/subscr.c +++ b/net/tipc/subscr.c | |||
@@ -462,7 +462,7 @@ static void subscr_named_msg_event(void *usr_handle, | |||
462 | kfree(subscriber); | 462 | kfree(subscriber); |
463 | return; | 463 | return; |
464 | } | 464 | } |
465 | tipc_connect2port(subscriber->port_ref, orig); | 465 | tipc_connect(subscriber->port_ref, orig); |
466 | 466 | ||
467 | /* Lock server port (& save lock address for future use) */ | 467 | /* Lock server port (& save lock address for future use) */ |
468 | subscriber->lock = tipc_port_lock(subscriber->port_ref)->lock; | 468 | subscriber->lock = tipc_port_lock(subscriber->port_ref)->lock; |