We only care about exclusive or of those, so pass that directly.
Makes life simpler for callers as well...

Signed-off-by: Al Viro <v...@zeniv.linux.org.uk>
---
 net/unix/af_unix.c | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index bb4c6200953d..a7e20fcadfcc 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -288,11 +288,11 @@ static inline void unix_insert_socket(struct hlist_head 
*list, struct sock *sk)
 
 static struct sock *__unix_find_socket_byname(struct net *net,
                                              struct sockaddr_un *sunname,
-                                             int len, int type, unsigned int 
hash)
+                                             int len, unsigned int hash)
 {
        struct sock *s;
 
-       sk_for_each(s, &unix_socket_table[hash ^ type]) {
+       sk_for_each(s, &unix_socket_table[hash]) {
                struct unix_sock *u = unix_sk(s);
 
                if (!net_eq(sock_net(s), net))
@@ -307,13 +307,12 @@ static struct sock *__unix_find_socket_byname(struct net 
*net,
 
 static inline struct sock *unix_find_socket_byname(struct net *net,
                                                   struct sockaddr_un *sunname,
-                                                  int len, int type,
-                                                  unsigned int hash)
+                                                  int len, unsigned int hash)
 {
        struct sock *s;
 
        spin_lock(&unix_table_lock);
-       s = __unix_find_socket_byname(net, sunname, len, type, hash);
+       s = __unix_find_socket_byname(net, sunname, len, hash);
        if (s)
                sock_hold(s);
        spin_unlock(&unix_table_lock);
@@ -900,12 +899,12 @@ static int unix_autobind(struct socket *sock)
 retry:
        addr->len = sprintf(addr->name->sun_path+1, "%05x", ordernum) + 1 + 
sizeof(short);
        addr->hash = unix_hash_fold(csum_partial(addr->name, addr->len, 0));
+       addr->hash ^= sk->sk_type;
 
        spin_lock(&unix_table_lock);
        ordernum = (ordernum+1)&0xFFFFF;
 
-       if (__unix_find_socket_byname(net, addr->name, addr->len, sock->type,
-                                     addr->hash)) {
+       if (__unix_find_socket_byname(net, addr->name, addr->len, addr->hash)) {
                spin_unlock(&unix_table_lock);
                /*
                 * __unix_find_socket_byname() may take long time if many names
@@ -920,7 +919,6 @@ static int unix_autobind(struct socket *sock)
                }
                goto retry;
        }
-       addr->hash ^= sk->sk_type;
 
        __unix_set_addr(sk, addr, addr->hash);
        err = 0;
@@ -966,7 +964,7 @@ static struct sock *unix_find_other(struct net *net,
                }
        } else {
                err = -ECONNREFUSED;
-               u = unix_find_socket_byname(net, sunname, len, type, hash);
+               u = unix_find_socket_byname(net, sunname, len, type ^ hash);
                if (u) {
                        struct dentry *dentry;
                        dentry = unix_sk(u)->path.dentry;
@@ -1036,8 +1034,7 @@ static int unix_bind_bsd(struct sock *sk, struct 
unix_address *addr)
        return err == -EEXIST ? -EADDRINUSE : err;
 }
 
-static int unix_bind_abstract(struct sock *sk, unsigned hash,
-                             struct unix_address *addr)
+static int unix_bind_abstract(struct sock *sk, struct unix_address *addr)
 {
        struct unix_sock *u = unix_sk(sk);
        int err;
@@ -1053,7 +1050,7 @@ static int unix_bind_abstract(struct sock *sk, unsigned 
hash,
 
        spin_lock(&unix_table_lock);
        if (__unix_find_socket_byname(sock_net(sk), addr->name, addr->len,
-                                     sk->sk_type, hash)) {
+                                     addr->hash)) {
                spin_unlock(&unix_table_lock);
                mutex_unlock(&u->bindlock);
                return -EADDRINUSE;
@@ -1095,7 +1092,7 @@ static int unix_bind(struct socket *sock, struct sockaddr 
*uaddr, int addr_len)
        if (sun_path[0])
                err = unix_bind_bsd(sk, addr);
        else
-               err = unix_bind_abstract(sk, hash, addr);
+               err = unix_bind_abstract(sk, addr);
        if (err)
                unix_release_addr(addr);
        return err;
-- 
2.11.0

Reply via email to