[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