[rds-devel] [git pull] more teardown bug fixes
Zach Brown
zach.brown at oracle.com
Tue Jul 27 11:00:55 PDT 2010
> Yep, look for rds_rdma module holding references and not unloading, even after all sockets are closed.
Yeah, sorry, I missed the other rds_get_preferred() caller. As discussed, just toss this into the patch and all's well!
- z
diff --git a/net/rds/connection.c b/net/rds/connection.c
index 87c4544..7a5398e 100644
--- a/net/rds/connection.c
+++ b/net/rds/connection.c
@@ -116,6 +116,7 @@ static struct rds_connection *__rds_conn_create(__be32 laddr, __be32 faddr,
{
struct rds_connection *conn, *parent = NULL;
struct hlist_head *head = rds_conn_bucket(laddr, faddr);
+ struct rds_transport *loop_trans;
unsigned long flags;
int ret;
@@ -166,7 +167,9 @@ static struct rds_connection *__rds_conn_create(__be32 laddr, __be32 faddr,
* can bind to the destination address then we'd rather the messages
* flow through loopback rather than either transport.
*/
- if (rds_trans_get_preferred(faddr)) {
+ loop_trans = rds_trans_get_preferred(faddr);
+ if (loop_trans) {
+ rds_trans_put(loop_trans);
conn->c_loopback = 1;
if (is_outgoing && trans->t_prefer_loopback) {
/* "outgoing" connection - and the transport
More information about the rds-devel
mailing list