RDS/IB: wait for IB dev freeing work to finish during rmmod
[linux-2.6.git] / net / rds / ib.c
index b21e24f..fc14f63 100644 (file)
@@ -336,11 +336,18 @@ static int rds_ib_laddr_check(__be32 addr)
        return ret;
 }
 
+static void rds_ib_unregister_client(void)
+{
+       ib_unregister_client(&rds_ib_client);
+       /* wait for rds_ib_dev_free() to complete */
+       flush_workqueue(rds_wq);
+}
+
 void rds_ib_exit(void)
 {
        rds_info_deregister_func(RDS_INFO_IB_CONNECTIONS, rds_ib_ic_info);
        rds_ib_destroy_nodev_conns();
-       ib_unregister_client(&rds_ib_client);
+       rds_ib_unregister_client();
        rds_ib_sysctl_exit();
        rds_ib_recv_exit();
        rds_trans_unregister(&rds_ib_transport);
@@ -404,7 +411,7 @@ out_recv:
 out_sysctl:
        rds_ib_sysctl_exit();
 out_ibreg:
-       ib_unregister_client(&rds_ib_client);
+       rds_ib_unregister_client();
 out:
        return ret;
 }