Fixed the following race conditions:
authorbvassche <bvassche@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Sat, 9 Jan 2010 20:14:13 +0000 (20:14 +0000)
committerbvassche <bvassche@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Sat, 9 Jan 2010 20:14:13 +0000 (20:14 +0000)
commitedc8c4efbf4943e543c1dd95762cfc6cfcd1e1f6
tree55ab1bc637c895edff92ce93817035127bdd5c60
parent8b5560d66858b03b656e9537a222285b3b2e29b1
Fixed the following race conditions:
- With thread=1, the kernel thread was stopped before all I/O was stopped.
  This could result in IB completions for responses sent to the initiator
  not being processed, scst_tgt_cmd_done() not being called for certain
  SCST commands and hence this race could cause "rmmod ib_srpt" to hang.
- ib_unregister_event_handler() was called after cancel_work_sync(). This
  could cause srpt_event_handler() to queue new work, work that could be
  executed after the data it operates on had been deallocated.
Change: simplified module unloading by calling ib_destroy_cm_id(sdev->cm_id)
  before calling scst_unregister(). This made the variable "cleaning_up"
  superfluous.

git-svn-id: https://scst.svn.sourceforge.net/svnroot/scst/trunk@1441 d57e44dd-8a1f-0410-8b47-8ef2f437770f
srpt/src/ib_srpt.c