]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/tipc/socket.c
Merge tag 'trace-v5.5-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux.git] / net / tipc / socket.c
index 41688da233aba37f92416d01a59a9e6b68a74e31..6552f986774cadef123a6763deec5ff05ac7269a 100644 (file)
@@ -1364,8 +1364,8 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
        struct tipc_msg *hdr = &tsk->phdr;
        struct tipc_name_seq *seq;
        struct sk_buff_head pkts;
-       u32 dport, dnode = 0;
-       u32 type, inst;
+       u32 dport = 0, dnode = 0;
+       u32 type = 0, inst = 0;
        int mtu, rc;
 
        if (unlikely(dlen > TIPC_MAX_USER_MSG_SIZE))
@@ -1418,23 +1418,11 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
                type = dest->addr.name.name.type;
                inst = dest->addr.name.name.instance;
                dnode = dest->addr.name.domain;
-               msg_set_type(hdr, TIPC_NAMED_MSG);
-               msg_set_hdr_sz(hdr, NAMED_H_SIZE);
-               msg_set_nametype(hdr, type);
-               msg_set_nameinst(hdr, inst);
-               msg_set_lookup_scope(hdr, tipc_node2scope(dnode));
                dport = tipc_nametbl_translate(net, type, inst, &dnode);
-               msg_set_destnode(hdr, dnode);
-               msg_set_destport(hdr, dport);
                if (unlikely(!dport && !dnode))
                        return -EHOSTUNREACH;
        } else if (dest->addrtype == TIPC_ADDR_ID) {
                dnode = dest->addr.id.node;
-               msg_set_type(hdr, TIPC_DIRECT_MSG);
-               msg_set_lookup_scope(hdr, 0);
-               msg_set_destnode(hdr, dnode);
-               msg_set_destport(hdr, dest->addr.id.ref);
-               msg_set_hdr_sz(hdr, BASIC_H_SIZE);
        } else {
                return -EINVAL;
        }
@@ -1445,6 +1433,22 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen)
        if (unlikely(rc))
                return rc;
 
+       if (dest->addrtype == TIPC_ADDR_NAME) {
+               msg_set_type(hdr, TIPC_NAMED_MSG);
+               msg_set_hdr_sz(hdr, NAMED_H_SIZE);
+               msg_set_nametype(hdr, type);
+               msg_set_nameinst(hdr, inst);
+               msg_set_lookup_scope(hdr, tipc_node2scope(dnode));
+               msg_set_destnode(hdr, dnode);
+               msg_set_destport(hdr, dport);
+       } else { /* TIPC_ADDR_ID */
+               msg_set_type(hdr, TIPC_DIRECT_MSG);
+               msg_set_lookup_scope(hdr, 0);
+               msg_set_destnode(hdr, dnode);
+               msg_set_destport(hdr, dest->addr.id.ref);
+               msg_set_hdr_sz(hdr, BASIC_H_SIZE);
+       }
+
        __skb_queue_head_init(&pkts);
        mtu = tipc_node_get_mtu(net, dnode, tsk->portid, false);
        rc = tipc_msg_build(hdr, m, 0, dlen, mtu, &pkts);