]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blobdiff - net/tipc/socket.c
sctp: remove the unnecessary assignment
[mirror_ubuntu-eoan-kernel.git] / net / tipc / socket.c
index 3b61851bb9276ec733f7ab8c9d2179a5dd7fef4d..c8341d1f995e8b68ba1b88856bab88449bfe888a 100644 (file)
@@ -239,7 +239,6 @@ static int tipc_sk_create(struct net *net, struct socket *sock, int protocol,
 int tipc_sock_create_local(int type, struct socket **res)
 {
        int rc;
-       struct sock *sk;
 
        rc = sock_create_lite(AF_TIPC, type, 0, res);
        if (rc < 0) {
@@ -248,8 +247,6 @@ int tipc_sock_create_local(int type, struct socket **res)
        }
        tipc_sk_create(&init_net, *res, 0, 1);
 
-       sk = (*res)->sk;
-
        return 0;
 }
 
@@ -354,7 +351,7 @@ static int release(struct socket *sock)
         * Delete TIPC port; this ensures no more messages are queued
         * (also disconnects an active connection & sends a 'FIN-' to peer)
         */
-       res = tipc_deleteport(tport->ref);
+       res = tipc_deleteport(tport);
 
        /* Discard any remaining (connection-based) messages in receive queue */
        __skb_queue_purge(&sk->sk_receive_queue);
@@ -386,30 +383,46 @@ static int release(struct socket *sock)
  */
 static int bind(struct socket *sock, struct sockaddr *uaddr, int uaddr_len)
 {
+       struct sock *sk = sock->sk;
        struct sockaddr_tipc *addr = (struct sockaddr_tipc *)uaddr;
-       u32 portref = tipc_sk_port(sock->sk)->ref;
+       struct tipc_port *tport = tipc_sk_port(sock->sk);
+       int res = -EINVAL;
 
-       if (unlikely(!uaddr_len))
-               return tipc_withdraw(portref, 0, NULL);
+       lock_sock(sk);
+       if (unlikely(!uaddr_len)) {
+               res = tipc_withdraw(tport, 0, NULL);
+               goto exit;
+       }
 
-       if (uaddr_len < sizeof(struct sockaddr_tipc))
-               return -EINVAL;
-       if (addr->family != AF_TIPC)
-               return -EAFNOSUPPORT;
+       if (uaddr_len < sizeof(struct sockaddr_tipc)) {
+               res = -EINVAL;
+               goto exit;
+       }
+       if (addr->family != AF_TIPC) {
+               res = -EAFNOSUPPORT;
+               goto exit;
+       }
 
        if (addr->addrtype == TIPC_ADDR_NAME)
                addr->addr.nameseq.upper = addr->addr.nameseq.lower;
-       else if (addr->addrtype != TIPC_ADDR_NAMESEQ)
-               return -EAFNOSUPPORT;
+       else if (addr->addrtype != TIPC_ADDR_NAMESEQ) {
+               res = -EAFNOSUPPORT;
+               goto exit;
+       }
 
        if ((addr->addr.nameseq.type < TIPC_RESERVED_TYPES) &&
            (addr->addr.nameseq.type != TIPC_TOP_SRV) &&
-           (addr->addr.nameseq.type != TIPC_CFG_SRV))
-               return -EACCES;
+           (addr->addr.nameseq.type != TIPC_CFG_SRV)) {
+               res = -EACCES;
+               goto exit;
+       }
 
-       return (addr->scope > 0) ?
-               tipc_publish(portref, addr->scope, &addr->addr.nameseq) :
-               tipc_withdraw(portref, -addr->scope, &addr->addr.nameseq);
+       res = (addr->scope > 0) ?
+               tipc_publish(tport, addr->scope, &addr->addr.nameseq) :
+               tipc_withdraw(tport, -addr->scope, &addr->addr.nameseq);
+exit:
+       release_sock(sk);
+       return res;
 }
 
 /**
@@ -754,16 +767,11 @@ static int send_stream(struct kiocb *iocb, struct socket *sock,
 
        /* Handle special cases where there is no connection */
        if (unlikely(sock->state != SS_CONNECTED)) {
-               if (sock->state == SS_UNCONNECTED) {
+               if (sock->state == SS_UNCONNECTED)
                        res = send_packet(NULL, sock, m, total_len);
-                       goto exit;
-               } else if (sock->state == SS_DISCONNECTING) {
-                       res = -EPIPE;
-                       goto exit;
-               } else {
-                       res = -ENOTCONN;
-                       goto exit;
-               }
+               else
+                       res = sock->state == SS_DISCONNECTING ? -EPIPE : -ENOTCONN;
+               goto exit;
        }
 
        if (unlikely(m->msg_name)) {
@@ -1311,14 +1319,12 @@ static u32 filter_connect(struct tipc_sock *tsock, struct sk_buff **buf)
 static unsigned int rcvbuf_limit(struct sock *sk, struct sk_buff *buf)
 {
        struct tipc_msg *msg = buf_msg(buf);
-       unsigned int limit;
 
        if (msg_connected(msg))
-               limit = sysctl_tipc_rmem[2];
-       else
-               limit = sk->sk_rcvbuf >> TIPC_CRITICAL_IMPORTANCE <<
-                       msg_importance(msg);
-       return limit;
+               return sysctl_tipc_rmem[2];
+
+       return sk->sk_rcvbuf >> TIPC_CRITICAL_IMPORTANCE <<
+               msg_importance(msg);
 }
 
 /**
@@ -1514,14 +1520,12 @@ static int connect(struct socket *sock, struct sockaddr *dest, int destlen,
                                sock->state != SS_CONNECTING,
                                timeout ? (long)msecs_to_jiffies(timeout)
                                        : MAX_SCHEDULE_TIMEOUT);
-               lock_sock(sk);
                if (res <= 0) {
                        if (res == 0)
                                res = -ETIMEDOUT;
-                       else
-                               ; /* leave "res" unchanged */
-                       goto exit;
+                       return res;
                }
+               lock_sock(sk);
        }
 
        if (unlikely(sock->state == SS_DISCONNECTING))