[SCSI] aacraid: Fix blocking issue with container probing function (cast update)
authorMark Haverkamp <markh@linux-foundation.org>
Thu, 15 Mar 2007 19:55:07 +0000 (12:55 -0700)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Tue, 20 Mar 2007 15:54:49 +0000 (10:54 -0500)
commitfe76df4235986cfacc2d3b71cef7c42bc1a6dd6c
treea8b31caeae0d4a60b0271c5e83a0c219de0fde72
parenta8166a52968216ae079a5530ac3269147de2ef31
[SCSI] aacraid: Fix blocking issue with container probing function (cast update)

Received from Mark Salyzyn,

The aac_probe_container call blocks. This is an issue because it is called on
occasion in the context of the queuecommand handler. Once in a blue moon this
has resulted in a kernel panic sleeping during interrupt; or problems with some
embedded system versions of the kernel that depend on queuecommand to not
block. This ugly patch rewrites the aac_probe_container call into a new routine
_aac_probe_container that is an asynchronous state machine to complete the
series of operations. The legacy blocking aac_probe_container call used in
other areas of the driver (during initialization scanning for all targets and
in the separate hot-add/remove [aacraid] thread) merely issues
_aac_probe_container and then simple spins calling schedule() waiting for
completion.

Signed-off-by: Mark Haverkamp <markh@linux-foundation.org>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/aacraid/aachba.c