]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/rds/af_rds.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux.git] / net / rds / af_rds.c
index a2f28a6d4dc579a6026e7506c80fd22d11e973a9..b5476aebd68d842e7e1b7ced45809a4c964e648e 100644 (file)
@@ -72,13 +72,7 @@ static int rds_release(struct socket *sock)
        rds_clear_recv_queue(rs);
        rds_cong_remove_socket(rs);
 
-       /*
-        * the binding lookup hash uses rcu, we need to
-        * make sure we synchronize_rcu before we free our
-        * entry
-        */
        rds_remove_bound(rs);
-       synchronize_rcu();
 
        rds_send_drop_to(rs, NULL);
        rds_rdma_drop_keys(rs);
@@ -579,6 +573,7 @@ static void rds_exit(void)
        rds_threads_exit();
        rds_stats_exit();
        rds_page_exit();
+       rds_bind_lock_destroy();
        rds_info_deregister_func(RDS_INFO_SOCKETS, rds_sock_info);
        rds_info_deregister_func(RDS_INFO_RECV_MESSAGES, rds_sock_inc_info);
 }
@@ -588,9 +583,14 @@ static int rds_init(void)
 {
        int ret;
 
-       ret = rds_conn_init();
+       ret = rds_bind_lock_init();
        if (ret)
                goto out;
+
+       ret = rds_conn_init();
+       if (ret)
+               goto out_bind;
+
        ret = rds_threads_init();
        if (ret)
                goto out_conn;
@@ -624,6 +624,8 @@ static int rds_init(void)
        rds_conn_exit();
        rds_cong_exit();
        rds_page_exit();
+out_bind:
+       rds_bind_lock_destroy();
 out:
        return ret;
 }