aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2006-08-31 18:09:25 -0400
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-09-02 14:37:07 -0400
commit60ecebf5a10e42f5e2d6e07eb9e24bdee8500b81 (patch)
tree79b27fd89fe175daa4e4cd6feda8a6548c6d9bf1 /include/scsi
parentffd0436ed2e5a741c8d30062b489b989acf0a526 (diff)
[SCSI] add refcouting around ctask usage in main IO patch
It is possible that a ctask could be completing and getting cleaned up at the same time, we are finishing up the last data transfer. This could then result in the data transfer code using stale or invalid values. This patch adds a refcount to the ctask. When the count goes to zero then we know the transmit thread and recv thread or softirq are not touching it and we can safely release it. The eh should not need to grab a reference because it only cleans up a task if it has both the xmit mutex and recv lock (or recv side suspended). Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/libiscsi.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
index 4900650bd081..401192e56e50 100644
--- a/include/scsi/libiscsi.h
+++ b/include/scsi/libiscsi.h
@@ -112,6 +112,7 @@ struct iscsi_cmd_task {
112 112
113 /* state set/tested under session->lock */ 113 /* state set/tested under session->lock */
114 int state; 114 int state;
115 atomic_t refcount;
115 struct list_head running; /* running cmd list */ 116 struct list_head running; /* running cmd list */
116 void *dd_data; /* driver/transport data */ 117 void *dd_data; /* driver/transport data */
117}; 118};