diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2006-07-24 16:47:29 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-07-28 12:49:01 -0400 |
commit | 63f75cc8a7e6ce453e38a7b90cdcae83d63f1ea7 (patch) | |
tree | a85cfe4591f704ba163334c310ce824bff8fa9b5 /drivers/scsi | |
parent | 1c83469d36a9dd30dbf1fb9fc5ca3be3a0e64ff4 (diff) |
[SCSI] iscsi bugfixes: fix oops when removing session
We are touching the cls_session after we have freed
it. This causes a oops.
Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libiscsi.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 36f520b9260e..c989bc6180b3 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
@@ -1337,6 +1337,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session) | |||
1337 | { | 1337 | { |
1338 | struct Scsi_Host *shost = iscsi_session_to_shost(cls_session); | 1338 | struct Scsi_Host *shost = iscsi_session_to_shost(cls_session); |
1339 | struct iscsi_session *session = iscsi_hostdata(shost->hostdata); | 1339 | struct iscsi_session *session = iscsi_hostdata(shost->hostdata); |
1340 | struct module *owner = cls_session->transport->owner; | ||
1340 | 1341 | ||
1341 | scsi_remove_host(shost); | 1342 | scsi_remove_host(shost); |
1342 | 1343 | ||
@@ -1345,7 +1346,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session) | |||
1345 | 1346 | ||
1346 | iscsi_destroy_session(cls_session); | 1347 | iscsi_destroy_session(cls_session); |
1347 | scsi_host_put(shost); | 1348 | scsi_host_put(shost); |
1348 | module_put(cls_session->transport->owner); | 1349 | module_put(owner); |
1349 | } | 1350 | } |
1350 | EXPORT_SYMBOL_GPL(iscsi_session_teardown); | 1351 | EXPORT_SYMBOL_GPL(iscsi_session_teardown); |
1351 | 1352 | ||