summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Maloy <jon.maloy@ericsson.com>2018-02-15 04:40:43 -0500
committerDavid S. Miller <davem@davemloft.net>2018-02-16 15:26:33 -0500
commitc901d26d4a8137f3ad0e5865d331f7c63c42d9f9 (patch)
tree89ff5b5f5fd1cb4f4c5c002cd2ada9353154d70d
parent27469b7352b5197cffa0e3dadb5f1127f055da27 (diff)
tipc: remove unnecessary function pointers
Interaction between the functionality in server.c and subscr.c is done via function pointers installed in struct server. This makes the code harder to follow, and doesn't serve any obvious purpose. Here, we replace the function pointers with direct function calls. Acked-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/tipc/server.c21
-rw-r--r--net/tipc/server.h5
-rw-r--r--net/tipc/subscr.c27
-rw-r--r--net/tipc/subscr.h4
4 files changed, 20 insertions, 37 deletions
diff --git a/net/tipc/server.c b/net/tipc/server.c
index 04a6dd99dd65..8aa2a33b1e48 100644
--- a/net/tipc/server.c
+++ b/net/tipc/server.c
@@ -33,6 +33,7 @@
33 * POSSIBILITY OF SUCH DAMAGE. 33 * POSSIBILITY OF SUCH DAMAGE.
34 */ 34 */
35 35
36#include "subscr.h"
36#include "server.h" 37#include "server.h"
37#include "core.h" 38#include "core.h"
38#include "socket.h" 39#include "socket.h"
@@ -182,7 +183,6 @@ static void tipc_register_callbacks(struct socket *sock, struct tipc_conn *con)
182 183
183static void tipc_close_conn(struct tipc_conn *con) 184static void tipc_close_conn(struct tipc_conn *con)
184{ 185{
185 struct tipc_server *s = con->server;
186 struct sock *sk = con->sock->sk; 186 struct sock *sk = con->sock->sk;
187 bool disconnect = false; 187 bool disconnect = false;
188 188
@@ -191,7 +191,7 @@ static void tipc_close_conn(struct tipc_conn *con)
191 if (disconnect) { 191 if (disconnect) {
192 sk->sk_user_data = NULL; 192 sk->sk_user_data = NULL;
193 if (con->conid) 193 if (con->conid)
194 s->tipc_conn_release(con->conid, con->usr_data); 194 tipc_subscrb_delete(con->usr_data);
195 } 195 }
196 write_unlock_bh(&sk->sk_callback_lock); 196 write_unlock_bh(&sk->sk_callback_lock);
197 197
@@ -240,7 +240,6 @@ static int tipc_receive_from_sock(struct tipc_conn *con)
240{ 240{
241 struct tipc_server *s = con->server; 241 struct tipc_server *s = con->server;
242 struct sock *sk = con->sock->sk; 242 struct sock *sk = con->sock->sk;
243 struct sockaddr_tipc addr;
244 struct msghdr msg = {}; 243 struct msghdr msg = {};
245 struct kvec iov; 244 struct kvec iov;
246 void *buf; 245 void *buf;
@@ -254,7 +253,7 @@ static int tipc_receive_from_sock(struct tipc_conn *con)
254 253
255 iov.iov_base = buf; 254 iov.iov_base = buf;
256 iov.iov_len = s->max_rcvbuf_size; 255 iov.iov_len = s->max_rcvbuf_size;
257 msg.msg_name = &addr; 256 msg.msg_name = NULL;
258 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, iov.iov_len); 257 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, iov.iov_len);
259 ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT); 258 ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT);
260 if (ret <= 0) { 259 if (ret <= 0) {
@@ -264,8 +263,8 @@ static int tipc_receive_from_sock(struct tipc_conn *con)
264 263
265 read_lock_bh(&sk->sk_callback_lock); 264 read_lock_bh(&sk->sk_callback_lock);
266 if (test_bit(CF_CONNECTED, &con->flags)) 265 if (test_bit(CF_CONNECTED, &con->flags))
267 ret = s->tipc_conn_recvmsg(sock_net(con->sock->sk), con->conid, 266 ret = tipc_subscrb_rcv(sock_net(con->sock->sk), con->conid,
268 &addr, con->usr_data, buf, ret); 267 con->usr_data, buf, ret);
269 read_unlock_bh(&sk->sk_callback_lock); 268 read_unlock_bh(&sk->sk_callback_lock);
270 kmem_cache_free(s->rcvbuf_cache, buf); 269 kmem_cache_free(s->rcvbuf_cache, buf);
271 if (ret < 0) 270 if (ret < 0)
@@ -284,7 +283,6 @@ out_close:
284 283
285static int tipc_accept_from_sock(struct tipc_conn *con) 284static int tipc_accept_from_sock(struct tipc_conn *con)
286{ 285{
287 struct tipc_server *s = con->server;
288 struct socket *sock = con->sock; 286 struct socket *sock = con->sock;
289 struct socket *newsock; 287 struct socket *newsock;
290 struct tipc_conn *newcon; 288 struct tipc_conn *newcon;
@@ -305,7 +303,8 @@ static int tipc_accept_from_sock(struct tipc_conn *con)
305 tipc_register_callbacks(newsock, newcon); 303 tipc_register_callbacks(newsock, newcon);
306 304
307 /* Notify that new connection is incoming */ 305 /* Notify that new connection is incoming */
308 newcon->usr_data = s->tipc_conn_new(newcon->conid); 306 newcon->usr_data = tipc_subscrb_create(newcon->conid);
307
309 if (!newcon->usr_data) { 308 if (!newcon->usr_data) {
310 sock_release(newsock); 309 sock_release(newsock);
311 conn_put(newcon); 310 conn_put(newcon);
@@ -489,7 +488,7 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower,
489 488
490 *conid = con->conid; 489 *conid = con->conid;
491 s = con->server; 490 s = con->server;
492 scbr = s->tipc_conn_new(*conid); 491 scbr = tipc_subscrb_create(*conid);
493 if (!scbr) { 492 if (!scbr) {
494 conn_put(con); 493 conn_put(con);
495 return false; 494 return false;
@@ -497,7 +496,7 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower,
497 496
498 con->usr_data = scbr; 497 con->usr_data = scbr;
499 con->sock = NULL; 498 con->sock = NULL;
500 s->tipc_conn_recvmsg(net, *conid, NULL, scbr, &sub, sizeof(sub)); 499 tipc_subscrb_rcv(net, *conid, scbr, &sub, sizeof(sub));
501 return true; 500 return true;
502} 501}
503 502
@@ -513,7 +512,7 @@ void tipc_topsrv_kern_unsubscr(struct net *net, int conid)
513 test_and_clear_bit(CF_CONNECTED, &con->flags); 512 test_and_clear_bit(CF_CONNECTED, &con->flags);
514 srv = con->server; 513 srv = con->server;
515 if (con->conid) 514 if (con->conid)
516 srv->tipc_conn_release(con->conid, con->usr_data); 515 tipc_subscrb_delete(con->usr_data);
517 conn_put(con); 516 conn_put(con);
518 conn_put(con); 517 conn_put(con);
519} 518}
diff --git a/net/tipc/server.h b/net/tipc/server.h
index 434736d545c2..b4b83bdc8b20 100644
--- a/net/tipc/server.h
+++ b/net/tipc/server.h
@@ -72,11 +72,6 @@ struct tipc_server {
72 struct workqueue_struct *rcv_wq; 72 struct workqueue_struct *rcv_wq;
73 struct workqueue_struct *send_wq; 73 struct workqueue_struct *send_wq;
74 int max_rcvbuf_size; 74 int max_rcvbuf_size;
75 void *(*tipc_conn_new)(int conid);
76 void (*tipc_conn_release)(int conid, void *usr_data);
77 int (*tipc_conn_recvmsg)(struct net *net, int conid,
78 struct sockaddr_tipc *addr, void *usr_data,
79 void *buf, size_t len);
80 struct sockaddr_tipc *saddr; 75 struct sockaddr_tipc *saddr;
81 char name[TIPC_SERVER_NAME_LEN]; 76 char name[TIPC_SERVER_NAME_LEN];
82}; 77};
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
index eaef826fc06d..b86fbbf7a0b9 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -220,7 +220,7 @@ static void tipc_subscrb_subscrp_delete(struct tipc_subscriber *subscriber,
220 spin_unlock_bh(&subscriber->lock); 220 spin_unlock_bh(&subscriber->lock);
221} 221}
222 222
223static struct tipc_subscriber *tipc_subscrb_create(int conid) 223struct tipc_subscriber *tipc_subscrb_create(int conid)
224{ 224{
225 struct tipc_subscriber *subscriber; 225 struct tipc_subscriber *subscriber;
226 226
@@ -237,7 +237,7 @@ static struct tipc_subscriber *tipc_subscrb_create(int conid)
237 return subscriber; 237 return subscriber;
238} 238}
239 239
240static void tipc_subscrb_delete(struct tipc_subscriber *subscriber) 240void tipc_subscrb_delete(struct tipc_subscriber *subscriber)
241{ 241{
242 tipc_subscrb_subscrp_delete(subscriber, NULL); 242 tipc_subscrb_subscrp_delete(subscriber, NULL);
243 tipc_subscrb_put(subscriber); 243 tipc_subscrb_put(subscriber);
@@ -315,16 +315,10 @@ static int tipc_subscrp_subscribe(struct net *net, struct tipc_subscr *s,
315 return 0; 315 return 0;
316} 316}
317 317
318/* Handle one termination request for the subscriber */ 318/* Handle one request to create a new subscription for the subscriber
319static void tipc_subscrb_release_cb(int conid, void *usr_data) 319 */
320{ 320int tipc_subscrb_rcv(struct net *net, int conid, void *usr_data,
321 tipc_subscrb_delete((struct tipc_subscriber *)usr_data); 321 void *buf, size_t len)
322}
323
324/* Handle one request to create a new subscription for the subscriber */
325static int tipc_subscrb_rcv_cb(struct net *net, int conid,
326 struct sockaddr_tipc *addr, void *usr_data,
327 void *buf, size_t len)
328{ 322{
329 struct tipc_subscriber *subscriber = usr_data; 323 struct tipc_subscriber *subscriber = usr_data;
330 struct tipc_subscr *s = (struct tipc_subscr *)buf; 324 struct tipc_subscr *s = (struct tipc_subscr *)buf;
@@ -345,12 +339,6 @@ static int tipc_subscrb_rcv_cb(struct net *net, int conid,
345 return tipc_subscrp_subscribe(net, s, subscriber, swap, status); 339 return tipc_subscrp_subscribe(net, s, subscriber, swap, status);
346} 340}
347 341
348/* Handle one request to establish a new subscriber */
349static void *tipc_subscrb_connect_cb(int conid)
350{
351 return (void *)tipc_subscrb_create(conid);
352}
353
354int tipc_topsrv_start(struct net *net) 342int tipc_topsrv_start(struct net *net)
355{ 343{
356 struct tipc_net *tn = net_generic(net, tipc_net_id); 344 struct tipc_net *tn = net_generic(net, tipc_net_id);
@@ -376,9 +364,6 @@ int tipc_topsrv_start(struct net *net)
376 topsrv->net = net; 364 topsrv->net = net;
377 topsrv->saddr = saddr; 365 topsrv->saddr = saddr;
378 topsrv->max_rcvbuf_size = sizeof(struct tipc_subscr); 366 topsrv->max_rcvbuf_size = sizeof(struct tipc_subscr);
379 topsrv->tipc_conn_recvmsg = tipc_subscrb_rcv_cb;
380 topsrv->tipc_conn_new = tipc_subscrb_connect_cb;
381 topsrv->tipc_conn_release = tipc_subscrb_release_cb;
382 367
383 strncpy(topsrv->name, name, strlen(name) + 1); 368 strncpy(topsrv->name, name, strlen(name) + 1);
384 tn->topsrv = topsrv; 369 tn->topsrv = topsrv;
diff --git a/net/tipc/subscr.h b/net/tipc/subscr.h
index f3edca775d9f..a736f29ba9ab 100644
--- a/net/tipc/subscr.h
+++ b/net/tipc/subscr.h
@@ -67,6 +67,10 @@ struct tipc_subscription {
67 struct tipc_event evt; 67 struct tipc_event evt;
68}; 68};
69 69
70struct tipc_subscriber *tipc_subscrb_create(int conid);
71void tipc_subscrb_delete(struct tipc_subscriber *subscriber);
72int tipc_subscrb_rcv(struct net *net, int conid, void *usr_data,
73 void *buf, size_t len);
70int tipc_subscrp_check_overlap(struct tipc_name_seq *seq, u32 found_lower, 74int tipc_subscrp_check_overlap(struct tipc_name_seq *seq, u32 found_lower,
71 u32 found_upper); 75 u32 found_upper);
72void tipc_subscrp_report_overlap(struct tipc_subscription *sub, 76void tipc_subscrp_report_overlap(struct tipc_subscription *sub,