diff options
Diffstat (limited to 'net/rds')
-rw-r--r-- | net/rds/connection.c | 6 | ||||
-rw-r--r-- | net/rds/send.c | 4 |
2 files changed, 3 insertions, 7 deletions
diff --git a/net/rds/connection.c b/net/rds/connection.c index 49adeef80..9b2de5e67 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -190,12 +190,6 @@ new_conn: } } - if (trans == NULL) { - kmem_cache_free(rds_conn_slab, conn); - conn = ERR_PTR(-ENODEV); - goto out; - } - conn->c_trans = trans; ret = trans->conn_alloc(conn, gfp); diff --git a/net/rds/send.c b/net/rds/send.c index 4df61a515..859de6f32 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -1009,11 +1009,13 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) release_sock(sk); } - /* racing with another thread binding seems ok here */ + lock_sock(sk); if (daddr == 0 || rs->rs_bound_addr == 0) { + release_sock(sk); ret = -ENOTCONN; /* XXX not a great errno */ goto out; } + release_sock(sk); if (payload_len > rds_sk_sndbuf(rs)) { ret = -EMSGSIZE; |