Skip to content

Commit

Permalink
tipc: remove unnecessary function pointers
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jon Maloy authored and David S. Miller committed Feb 16, 2018
1 parent 27469b7 commit c901d26
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 37 deletions.
21 changes: 10 additions & 11 deletions net/tipc/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/

#include "subscr.h"
#include "server.h"
#include "core.h"
#include "socket.h"
Expand Down Expand Up @@ -182,7 +183,6 @@ static void tipc_register_callbacks(struct socket *sock, struct tipc_conn *con)

static void tipc_close_conn(struct tipc_conn *con)
{
struct tipc_server *s = con->server;
struct sock *sk = con->sock->sk;
bool disconnect = false;

Expand All @@ -191,7 +191,7 @@ static void tipc_close_conn(struct tipc_conn *con)
if (disconnect) {
sk->sk_user_data = NULL;
if (con->conid)
s->tipc_conn_release(con->conid, con->usr_data);
tipc_subscrb_delete(con->usr_data);
}
write_unlock_bh(&sk->sk_callback_lock);

Expand Down Expand Up @@ -240,7 +240,6 @@ static int tipc_receive_from_sock(struct tipc_conn *con)
{
struct tipc_server *s = con->server;
struct sock *sk = con->sock->sk;
struct sockaddr_tipc addr;
struct msghdr msg = {};
struct kvec iov;
void *buf;
Expand All @@ -254,7 +253,7 @@ static int tipc_receive_from_sock(struct tipc_conn *con)

iov.iov_base = buf;
iov.iov_len = s->max_rcvbuf_size;
msg.msg_name = &addr;
msg.msg_name = NULL;
iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, iov.iov_len);
ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT);
if (ret <= 0) {
Expand All @@ -264,8 +263,8 @@ static int tipc_receive_from_sock(struct tipc_conn *con)

read_lock_bh(&sk->sk_callback_lock);
if (test_bit(CF_CONNECTED, &con->flags))
ret = s->tipc_conn_recvmsg(sock_net(con->sock->sk), con->conid,
&addr, con->usr_data, buf, ret);
ret = tipc_subscrb_rcv(sock_net(con->sock->sk), con->conid,
con->usr_data, buf, ret);
read_unlock_bh(&sk->sk_callback_lock);
kmem_cache_free(s->rcvbuf_cache, buf);
if (ret < 0)
Expand All @@ -284,7 +283,6 @@ static int tipc_receive_from_sock(struct tipc_conn *con)

static int tipc_accept_from_sock(struct tipc_conn *con)
{
struct tipc_server *s = con->server;
struct socket *sock = con->sock;
struct socket *newsock;
struct tipc_conn *newcon;
Expand All @@ -305,7 +303,8 @@ static int tipc_accept_from_sock(struct tipc_conn *con)
tipc_register_callbacks(newsock, newcon);

/* Notify that new connection is incoming */
newcon->usr_data = s->tipc_conn_new(newcon->conid);
newcon->usr_data = tipc_subscrb_create(newcon->conid);

if (!newcon->usr_data) {
sock_release(newsock);
conn_put(newcon);
Expand Down Expand Up @@ -489,15 +488,15 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower,

*conid = con->conid;
s = con->server;
scbr = s->tipc_conn_new(*conid);
scbr = tipc_subscrb_create(*conid);
if (!scbr) {
conn_put(con);
return false;
}

con->usr_data = scbr;
con->sock = NULL;
s->tipc_conn_recvmsg(net, *conid, NULL, scbr, &sub, sizeof(sub));
tipc_subscrb_rcv(net, *conid, scbr, &sub, sizeof(sub));
return true;
}

Expand All @@ -513,7 +512,7 @@ void tipc_topsrv_kern_unsubscr(struct net *net, int conid)
test_and_clear_bit(CF_CONNECTED, &con->flags);
srv = con->server;
if (con->conid)
srv->tipc_conn_release(con->conid, con->usr_data);
tipc_subscrb_delete(con->usr_data);
conn_put(con);
conn_put(con);
}
Expand Down
5 changes: 0 additions & 5 deletions net/tipc/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,6 @@ struct tipc_server {
struct workqueue_struct *rcv_wq;
struct workqueue_struct *send_wq;
int max_rcvbuf_size;
void *(*tipc_conn_new)(int conid);
void (*tipc_conn_release)(int conid, void *usr_data);
int (*tipc_conn_recvmsg)(struct net *net, int conid,
struct sockaddr_tipc *addr, void *usr_data,
void *buf, size_t len);
struct sockaddr_tipc *saddr;
char name[TIPC_SERVER_NAME_LEN];
};
Expand Down
27 changes: 6 additions & 21 deletions net/tipc/subscr.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ static void tipc_subscrb_subscrp_delete(struct tipc_subscriber *subscriber,
spin_unlock_bh(&subscriber->lock);
}

static struct tipc_subscriber *tipc_subscrb_create(int conid)
struct tipc_subscriber *tipc_subscrb_create(int conid)
{
struct tipc_subscriber *subscriber;

Expand All @@ -237,7 +237,7 @@ static struct tipc_subscriber *tipc_subscrb_create(int conid)
return subscriber;
}

static void tipc_subscrb_delete(struct tipc_subscriber *subscriber)
void tipc_subscrb_delete(struct tipc_subscriber *subscriber)
{
tipc_subscrb_subscrp_delete(subscriber, NULL);
tipc_subscrb_put(subscriber);
Expand Down Expand Up @@ -315,16 +315,10 @@ static int tipc_subscrp_subscribe(struct net *net, struct tipc_subscr *s,
return 0;
}

/* Handle one termination request for the subscriber */
static void tipc_subscrb_release_cb(int conid, void *usr_data)
{
tipc_subscrb_delete((struct tipc_subscriber *)usr_data);
}

/* Handle one request to create a new subscription for the subscriber */
static int tipc_subscrb_rcv_cb(struct net *net, int conid,
struct sockaddr_tipc *addr, void *usr_data,
void *buf, size_t len)
/* Handle one request to create a new subscription for the subscriber
*/
int tipc_subscrb_rcv(struct net *net, int conid, void *usr_data,
void *buf, size_t len)
{
struct tipc_subscriber *subscriber = usr_data;
struct tipc_subscr *s = (struct tipc_subscr *)buf;
Expand All @@ -345,12 +339,6 @@ static int tipc_subscrb_rcv_cb(struct net *net, int conid,
return tipc_subscrp_subscribe(net, s, subscriber, swap, status);
}

/* Handle one request to establish a new subscriber */
static void *tipc_subscrb_connect_cb(int conid)
{
return (void *)tipc_subscrb_create(conid);
}

int tipc_topsrv_start(struct net *net)
{
struct tipc_net *tn = net_generic(net, tipc_net_id);
Expand All @@ -376,9 +364,6 @@ int tipc_topsrv_start(struct net *net)
topsrv->net = net;
topsrv->saddr = saddr;
topsrv->max_rcvbuf_size = sizeof(struct tipc_subscr);
topsrv->tipc_conn_recvmsg = tipc_subscrb_rcv_cb;
topsrv->tipc_conn_new = tipc_subscrb_connect_cb;
topsrv->tipc_conn_release = tipc_subscrb_release_cb;

strncpy(topsrv->name, name, strlen(name) + 1);
tn->topsrv = topsrv;
Expand Down
4 changes: 4 additions & 0 deletions net/tipc/subscr.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ struct tipc_subscription {
struct tipc_event evt;
};

struct tipc_subscriber *tipc_subscrb_create(int conid);
void tipc_subscrb_delete(struct tipc_subscriber *subscriber);
int tipc_subscrb_rcv(struct net *net, int conid, void *usr_data,
void *buf, size_t len);
int tipc_subscrp_check_overlap(struct tipc_name_seq *seq, u32 found_lower,
u32 found_upper);
void tipc_subscrp_report_overlap(struct tipc_subscription *sub,
Expand Down

0 comments on commit c901d26

Please sign in to comment.