tipc: simplify signature of tipc_nametbl_lookup_group()
authorJon Maloy <jmaloy@redhat.com>
Wed, 17 Mar 2021 02:06:18 +0000 (22:06 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 17 Mar 2021 18:51:04 +0000 (11:51 -0700)
We reduce the signature of tipc_nametbl_lookup_group() by using a
struct tipc_uaddr pointer. This entails a couple of minor changes in the
functions tipc_send_group_mcast/anycast/unicast/bcast() in socket.c

Signed-off-by: Jon Maloy <jmaloy@redhat.com>
Acked-by: Ying Xue <ying.xue@windriver.com>
Acked-by: Hoang Le <hoang.h.le@dektech.com.au>
Acked-by: Tung Nguyen <tung.q.nguyen@dektech.com.au>
Acked-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/name_table.c
net/tipc/name_table.h
net/tipc/socket.c

index 33b79a5..1ce65cb 100644 (file)
@@ -621,31 +621,31 @@ exit:
  * destination socket/node pairs matching the given address.
  * The requester may or may not want to exclude himself from the list.
  */
-bool tipc_nametbl_lookup_group(struct net *net, u32 type, u32 instance,
-                              u32 scope, struct list_head *dsts,
-                              int *dstcnt, u32 exclude,
-                              bool mcast)
+bool tipc_nametbl_lookup_group(struct net *net, struct tipc_uaddr *ua,
+                              struct list_head *dsts, int *dstcnt,
+                              u32 exclude, bool mcast)
 {
        u32 self = tipc_own_addr(net);
+       u32 inst = ua->sa.instance;
        struct service_range *sr;
        struct tipc_service *sc;
        struct publication *p;
 
        *dstcnt = 0;
        rcu_read_lock();
-       sc = tipc_service_find(net, type);
+       sc = tipc_service_find(net, ua->sa.type);
        if (unlikely(!sc))
                goto exit;
 
        spin_lock_bh(&sc->lock);
 
        /* Todo: a full search i.e. service_range_foreach_match() instead? */
-       sr = service_range_match_first(sc->ranges.rb_node, instance, instance);
+       sr = service_range_match_first(sc->ranges.rb_node, inst, inst);
        if (!sr)
                goto no_match;
 
        list_for_each_entry(p, &sr->all_publ, all_publ) {
-               if (p->scope != scope)
+               if (p->scope != ua->scope)
                        continue;
                if (p->sk.ref == exclude && p->sk.node == self)
                        continue;
index c5aa45a..b20b694 100644 (file)
@@ -116,10 +116,9 @@ void tipc_nametbl_lookup_mcast_sockets(struct net *net, struct tipc_uaddr *ua,
                                       bool exact, struct list_head *dports);
 void tipc_nametbl_lookup_mcast_nodes(struct net *net, struct tipc_uaddr *ua,
                                     struct tipc_nlist *nodes);
-bool tipc_nametbl_lookup_group(struct net *net, u32 type, u32 instance,
-                              u32 domain, struct list_head *dsts,
-                              int *dstcnt, u32 exclude,
-                              bool all);
+bool tipc_nametbl_lookup_group(struct net *net, struct tipc_uaddr *ua,
+                              struct list_head *dsts, int *dstcnt,
+                              u32 exclude, bool mcast);
 void tipc_nametbl_build_group(struct net *net, struct tipc_group *grp,
                              u32 type, u32 domain);
 struct publication *tipc_nametbl_publish(struct net *net, struct tipc_uaddr *ua,
index 83d7c9c..a7f86f2 100644 (file)
@@ -958,7 +958,7 @@ static int tipc_send_group_unicast(struct socket *sock, struct msghdr *m,
                                   int dlen, long timeout)
 {
        struct sock *sk = sock->sk;
-       DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
+       struct tipc_uaddr *ua = (struct tipc_uaddr *)m->msg_name;
        int blks = tsk_blocks(GROUP_H_SIZE + dlen);
        struct tipc_sock *tsk = tipc_sk(sk);
        struct net *net = sock_net(sk);
@@ -966,8 +966,8 @@ static int tipc_send_group_unicast(struct socket *sock, struct msghdr *m,
        u32 node, port;
        int rc;
 
-       node = dest->addr.id.node;
-       port = dest->addr.id.ref;
+       node = ua->sk.node;
+       port = ua->sk.ref;
        if (!port && !node)
                return -EHOSTUNREACH;
 
@@ -1001,7 +1001,7 @@ static int tipc_send_group_unicast(struct socket *sock, struct msghdr *m,
 static int tipc_send_group_anycast(struct socket *sock, struct msghdr *m,
                                   int dlen, long timeout)
 {
-       DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
+       struct tipc_uaddr *ua = (struct tipc_uaddr *)m->msg_name;
        struct sock *sk = sock->sk;
        struct tipc_sock *tsk = tipc_sk(sk);
        struct list_head *cong_links = &tsk->cong_links;
@@ -1012,16 +1012,13 @@ static int tipc_send_group_anycast(struct socket *sock, struct msghdr *m,
        struct net *net = sock_net(sk);
        u32 node, port, exclude;
        struct list_head dsts;
-       u32 type, inst, scope;
        int lookups = 0;
        int dstcnt, rc;
        bool cong;
 
        INIT_LIST_HEAD(&dsts);
-
-       type = msg_nametype(hdr);
-       inst = dest->addr.name.name.instance;
-       scope = msg_lookup_scope(hdr);
+       ua->sa.type = msg_nametype(hdr);
+       ua->scope = msg_lookup_scope(hdr);
 
        while (++lookups < 4) {
                exclude = tipc_group_exclude(tsk->group);
@@ -1030,9 +1027,8 @@ static int tipc_send_group_anycast(struct socket *sock, struct msghdr *m,
 
                /* Look for a non-congested destination member, if any */
                while (1) {
-                       if (!tipc_nametbl_lookup_group(net, type, inst, scope,
-                                                      &dsts, &dstcnt, exclude,
-                                                      false))
+                       if (!tipc_nametbl_lookup_group(net, ua, &dsts, &dstcnt,
+                                                      exclude, false))
                                return -EHOSTUNREACH;
                        tipc_dest_pop(&dsts, &node, &port);
                        cong = tipc_group_cong(tsk->group, node, port, blks,
@@ -1087,7 +1083,7 @@ static int tipc_send_group_anycast(struct socket *sock, struct msghdr *m,
 static int tipc_send_group_bcast(struct socket *sock, struct msghdr *m,
                                 int dlen, long timeout)
 {
-       DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
+       struct tipc_uaddr *ua = (struct tipc_uaddr *)m->msg_name;
        struct sock *sk = sock->sk;
        struct net *net = sock_net(sk);
        struct tipc_sock *tsk = tipc_sk(sk);
@@ -1112,9 +1108,9 @@ static int tipc_send_group_bcast(struct socket *sock, struct msghdr *m,
                return -EHOSTUNREACH;
 
        /* Complete message header */
-       if (dest) {
+       if (ua) {
                msg_set_type(hdr, TIPC_GRP_MCAST_MSG);
-               msg_set_nameinst(hdr, dest->addr.name.name.instance);
+               msg_set_nameinst(hdr, ua->sa.instance);
        } else {
                msg_set_type(hdr, TIPC_GRP_BCAST_MSG);
                msg_set_nameinst(hdr, 0);
@@ -1161,29 +1157,25 @@ static int tipc_send_group_bcast(struct socket *sock, struct msghdr *m,
 static int tipc_send_group_mcast(struct socket *sock, struct msghdr *m,
                                 int dlen, long timeout)
 {
+       struct tipc_uaddr *ua = (struct tipc_uaddr *)m->msg_name;
        struct sock *sk = sock->sk;
-       DECLARE_SOCKADDR(struct sockaddr_tipc *, dest, m->msg_name);
        struct tipc_sock *tsk = tipc_sk(sk);
        struct tipc_group *grp = tsk->group;
        struct tipc_msg *hdr = &tsk->phdr;
        struct net *net = sock_net(sk);
-       u32 type, inst, scope, exclude;
        struct list_head dsts;
-       u32 dstcnt;
+       u32 dstcnt, exclude;
 
        INIT_LIST_HEAD(&dsts);
-
-       type = msg_nametype(hdr);
-       inst = dest->addr.name.name.instance;
-       scope = msg_lookup_scope(hdr);
+       ua->sa.type = msg_nametype(hdr);
+       ua->scope = msg_lookup_scope(hdr);
        exclude = tipc_group_exclude(grp);
 
-       if (!tipc_nametbl_lookup_group(net, type, inst, scope, &dsts,
-                                      &dstcnt, exclude, true))
+       if (!tipc_nametbl_lookup_group(net, ua, &dsts, &dstcnt, exclude, true))
                return -EHOSTUNREACH;
 
        if (dstcnt == 1) {
-               tipc_dest_pop(&dsts, &dest->addr.id.node, &dest->addr.id.ref);
+               tipc_dest_pop(&dsts, &ua->sk.node, &ua->sk.ref);
                return tipc_send_group_unicast(sock, m, dlen, timeout);
        }