diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-11 09:14:34 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-11 09:14:34 -0700 |
commit | 6c47d773e7d8f784996d9027f035379baa19ded7 (patch) | |
tree | bae50321bed6623a1da18732bca5bbfe9b6b8aaf /drivers/infiniband/core/cm.c | |
parent | 2f44bbb495dd3e6d0209eff2257438ab9c570e5b (diff) | |
parent | d7c1fbd6606085dbf95e47068d6bd2db8a180e38 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
RDMA/iwcm: Don't access a cm_id after dropping reference
IB/iser: Handle iser_device allocation error gracefully
IB/iser: Fix list iteration bug
RDMA/cxgb3: Fix iwch_create_cq() off-by-one error
RDMA/cxgb3: Return correct max_inline_data when creating a QP
IB/fmr_pool: Flush all dirty FMRs from ib_fmr_pool_flush()
Revert "IB/fmr_pool: ib_fmr_pool_flush() should flush all dirty FMRs"
IB/cm: Flush workqueue when removing device
MAINTAINERS: update ipath owner
Diffstat (limited to 'drivers/infiniband/core/cm.c')
-rw-r--r-- | drivers/infiniband/core/cm.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index b10ade92efed..4df405157086 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c @@ -3759,6 +3759,7 @@ static void cm_remove_one(struct ib_device *device) port = cm_dev->port[i-1]; ib_modify_port(device, port->port_num, 0, &port_modify); ib_unregister_mad_agent(port->mad_agent); + flush_workqueue(cm.wq); cm_remove_port_fs(port); } kobject_put(&cm_dev->dev_obj); @@ -3813,6 +3814,7 @@ static void __exit ib_cm_cleanup(void) cancel_delayed_work(&timewait_info->work.work); spin_unlock_irq(&cm.lock); + ib_unregister_client(&cm_client); destroy_workqueue(cm.wq); list_for_each_entry_safe(timewait_info, tmp, &cm.timewait_list, list) { @@ -3820,7 +3822,6 @@ static void __exit ib_cm_cleanup(void) kfree(timewait_info); } - ib_unregister_client(&cm_client); class_unregister(&cm_class); idr_destroy(&cm.local_id_table); } |