summaryrefslogtreecommitdiffstats
path: root/usr
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2009-05-13 17:57:46 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-05-23 15:44:12 -0500
commit3bbaaad95fd38dedb7c66a601f14825b4e0c5a59 (patch)
tree1e149ff38906956227e41722947d48f289f2c488 /usr
parent4c48a82935f833d94fcf44c2b0c5d2922acfc77a (diff)
downloadlinux-stable-3bbaaad95fd38dedb7c66a601f14825b4e0c5a59.tar.gz
linux-stable-3bbaaad95fd38dedb7c66a601f14825b4e0c5a59.tar.bz2
linux-stable-3bbaaad95fd38dedb7c66a601f14825b4e0c5a59.zip
[SCSI] libiscsi: handle cleanup task races
bnx2i needs to send a hardware specific cleanup command if a command has not completed normally (iscsi/scsi response from target), and the session is still ok (this is the case when we send a TMF to stop the command). At this time it will need to drop the session lock. The problem with the current code is that fail_all_commands assumes we will hold the lock the entire time, so it uses list_for_each_entry_safe. If while bnx2i drops the session lock multiple cmds complete then list_for_each_entry_safe will not handle this correctly. This patch removes the running lists and just has us loop over the cmds array (in later patches we will then replace that array with a block tag map at the session level). It also fixes up the completion path so that if the TMF code and the normal recv path were completing the same command then they both do not try to do release the refcount taken when the task is queued. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'usr')
0 files changed, 0 insertions, 0 deletions