[SCSI] aic94xx: asd_clear_nexus should fail if the cleared task does not complete
authorDarrick J. Wong <djwong@us.ibm.com>
Wed, 16 May 2007 21:01:48 +0000 (14:01 -0700)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Tue, 22 May 2007 19:12:45 +0000 (14:12 -0500)
commit8fdcf86af61bfba744f5868ec04dad71637ac33a
treeb06c1fbc1191e63df6e8bead9a481f3f2241a07c
parentf45ffaec2e51071ea0067849cbb84df9e0531b35
[SCSI] aic94xx: asd_clear_nexus should fail if the cleared task does not complete

Every so often, the driver will call asd_clear_nexus to clean out a task.
It is supposed to be the case that the CLEAR NEXUS does not go on the done
list until after the task itself has been put on the done list, but for
some reason this doesn't always happen.  Thus, the
wait_for_completion_timeout call times out, and we return success.  This
makes libsas free the task even though the task hasn't completed, leading
to a BUG_ON message from aic94xx_hwi.c around line 341.  We should return
failure from asd_clear_nexus so that libsas tries again; at a bare minimum
it shouldn't be freeing active tasks.  I _think_ this will fix one of
the SCB timeout crash problems (though I've not been able to reproduce
it lately...)

Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/aic94xx/aic94xx_tmf.c