diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2006-08-31 18:09:25 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-09-02 14:37:07 -0400 |
commit | 60ecebf5a10e42f5e2d6e07eb9e24bdee8500b81 (patch) | |
tree | 79b27fd89fe175daa4e4cd6feda8a6548c6d9bf1 /include/scsi/libiscsi.h | |
parent | ffd0436ed2e5a741c8d30062b489b989acf0a526 (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/libiscsi.h')
-rw-r--r-- | include/scsi/libiscsi.h | 1 |
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 | }; |