bk://linux-scsi.bkbits.net/scsi-rc-fixes-2.6
heiko.carstens@de.ibm.com[jejb]|ChangeSet|20050202225642|31656 heiko.carstens

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/02/02 21:09:11-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-scsi-rc-fixes
# 
# drivers/scsi/sr.c
#   2005/02/02 21:09:04-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/02/02 16:56:42-06:00 heiko.carstens@de.ibm.com 
#   [PATCH] zfcp: bugfixes (without kfree) for -bk
#   
#   From: Andreas Herrmann <aherrman@de.ibm.com>
#   From: Maxim Shchetynin <maxim@de.ibm.com>
#   
#   zfcp changes:
#    - don't call del_timer_sync() in interrupt context
#    - correct residual count handling for data underruns
#    - mark LUN as ACCESS_DENIED on status LUN_SHARING_VIOLATION
#   
#   Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
#   Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
# 
# drivers/s390/scsi/zfcp_fsf.c
#   2005/01/31 04:00:18-06:00 heiko.carstens@de.ibm.com +18 -19
#   zfcp: bugfixes (without kfree) for -bk
# 
# drivers/s390/scsi/zfcp_erp.c
#   2005/01/31 03:44:30-06:00 heiko.carstens@de.ibm.com +3 -3
#   zfcp: bugfixes (without kfree) for -bk
# 
# ChangeSet
#   2005/02/01 14:56:54-06:00 jejb@mulgrave.(none) 
#   SCSI: fix HBA removal problem with transport classes
#   
#   James Smart pointed out that if you insert and remove a HBA driver a few
#   times, eventually the system oopses.
#   
#   The reason is that the transport classes all kfree their attribute
#   containers, but don't actually unregister them first (so we have freed
#   memory on the container list).  The attached should fix this.
#   
#   Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
# 
# drivers/scsi/scsi_transport_spi.c
#   2005/02/01 14:54:44-06:00 jejb@mulgrave.(none) +3 -0
#   SCSI: fix HBA removal problem with transport classes
# 
# drivers/scsi/scsi_transport_iscsi.c
#   2005/02/01 14:54:44-06:00 jejb@mulgrave.(none) +4 -0
#   SCSI: fix HBA removal problem with transport classes
# 
# drivers/scsi/scsi_transport_fc.c
#   2005/02/01 14:54:44-06:00 jejb@mulgrave.(none) +3 -0
#   SCSI: fix HBA removal problem with transport classes
# 
# ChangeSet
#   2005/01/28 14:38:23-08:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-scsi-rc-fixes
# 
# drivers/scsi/sr.c
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/sg.c
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/sd.c
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/scsi_debug.c
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/osst.c
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/dpt_i2o.c
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/Kconfig
#   2005/01/28 14:38:18-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/26 18:44:38-08:00 akpm@bix.(none) 
#   Merge bk://linux-scsi.bkbits.net/scsi-rc-fixes-2.6
#   into bix.(none):/usr/src/bk-scsi-rc-fixes
# 
# drivers/scsi/osst.c
#   2005/01/26 18:44:34-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2005/01/23 22:27:17-08:00 akpm@bix.(none) 
#   Merge bk://linux-scsi.bkbits.net/scsi-rc-fixes-2.6
#   into bix.(none):/usr/src/bk-scsi-rc-fixes
# 
# drivers/scsi/sr.c
#   2005/01/23 22:27:12-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/sg.c
#   2005/01/23 22:27:12-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/sd.c
#   2005/01/23 22:27:12-08:00 akpm@bix.(none) +0 -1
#   Auto merged
# 
# drivers/scsi/scsi_debug.c
#   2005/01/23 22:27:12-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/dpt_i2o.c
#   2005/01/23 22:27:12-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/scsi/Kconfig
#   2005/01/23 22:27:12-08:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
--- a/drivers/s390/scsi/zfcp_erp.c	2005-02-03 18:29:36 -08:00
+++ b/drivers/s390/scsi/zfcp_erp.c	2005-02-03 18:29:36 -08:00
@@ -31,7 +31,7 @@
 
 #define ZFCP_LOG_AREA			ZFCP_LOG_AREA_ERP
 
-#define ZFCP_ERP_REVISION "$Revision: 1.85 $"
+#define ZFCP_ERP_REVISION "$Revision: 1.86 $"
 
 #include "zfcp_ext.h"
 
@@ -369,7 +369,7 @@
 		ZFCP_LOG_NORMAL("error: initiation of Send ELS failed for port "
 				"0x%08x on adapter %s\n", d_id,
 				zfcp_get_busid_by_adapter(adapter));
-		del_timer_sync(send_els->timer);
+		del_timer(send_els->timer);
 		goto freemem;
 	}
 
@@ -969,7 +969,7 @@
 		debug_event(adapter->erp_dbf, 2, &erp_action->action,
 			    sizeof (int));
 		if (!(set_mask & ZFCP_STATUS_ERP_TIMEDOUT))
-			del_timer_sync(&erp_action->timer);
+			del_timer(&erp_action->timer);
 		erp_action->status |= set_mask;
 		zfcp_erp_action_ready(erp_action);
 		retval = 0;
diff -Nru a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
--- a/drivers/s390/scsi/zfcp_fsf.c	2005-02-03 18:29:36 -08:00
+++ b/drivers/s390/scsi/zfcp_fsf.c	2005-02-03 18:29:36 -08:00
@@ -30,7 +30,7 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#define ZFCP_FSF_C_REVISION "$Revision: 1.88 $"
+#define ZFCP_FSF_C_REVISION "$Revision: 1.92 $"
 
 #include "zfcp_ext.h"
 
@@ -3203,7 +3203,9 @@
 			      sizeof (union fsf_status_qual));
 		debug_text_event(adapter->erp_dbf, 2,
 				 "fsf_s_l_sh_vio");
-		zfcp_erp_unit_failed(unit);
+		zfcp_erp_unit_access_denied(unit);
+		atomic_clear_mask(ZFCP_STATUS_UNIT_SHARED, &unit->status);
+		atomic_clear_mask(ZFCP_STATUS_UNIT_READONLY, &unit->status);
 		fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;
 		break;
 
@@ -4320,22 +4322,19 @@
 
 	/* check for underrun */
 	if (unlikely(fcp_rsp_iu->validity.bits.fcp_resid_under)) {
-		ZFCP_LOG_DEBUG("A data underrun was detected for a command. "
-			       "unit 0x%016Lx, port 0x%016Lx, adapter %s. "
-			       "The response data length is "
-			       "%d, the original length was %d.\n",
-			       unit->fcp_lun,
-			       unit->port->wwpn,
-			       zfcp_get_busid_by_unit(unit),
-			       fcp_rsp_iu->fcp_resid,
-			       (int) zfcp_get_fcp_dl(fcp_cmnd_iu));
-		/*
-		 * It may not have been possible to send all data and the
-		 * underrun on send may already be in scpnt->resid, so it's add
-		 * not equals in the below statement.
-		 */
-		scpnt->resid += fcp_rsp_iu->fcp_resid;
-		ZFCP_LOG_TRACE("scpnt->resid=0x%x\n", scpnt->resid);
+		ZFCP_LOG_INFO("A data underrun was detected for a command. "
+			      "unit 0x%016Lx, port 0x%016Lx, adapter %s. "
+			      "The response data length is "
+			      "%d, the original length was %d.\n",
+			      unit->fcp_lun,
+			      unit->port->wwpn,
+			      zfcp_get_busid_by_unit(unit),
+			      fcp_rsp_iu->fcp_resid,
+			      (int) zfcp_get_fcp_dl(fcp_cmnd_iu));
+
+		scpnt->resid = fcp_rsp_iu->fcp_resid;
+		if (scpnt->request_bufflen - scpnt->resid < scpnt->underflow)
+			scpnt->result |= DID_ERROR << 16;
 	}
 
  skip_fsfstatus:
@@ -5023,7 +5022,7 @@
 		 * timer might be expired (absolutely unlikely)
 		 */
 		if (timer)
-			del_timer_sync(timer);
+			del_timer(timer);
 		write_lock_irqsave(&adapter->fsf_req_list_lock, flags);
 		list_del(&fsf_req->list);
 		write_unlock_irqrestore(&adapter->fsf_req_list_lock, flags);
diff -Nru a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
--- a/drivers/scsi/scsi_transport_fc.c	2005-02-03 18:29:36 -08:00
+++ b/drivers/scsi/scsi_transport_fc.c	2005-02-03 18:29:36 -08:00
@@ -847,6 +847,9 @@
 {
 	struct fc_internal *i = to_fc_internal(t);
 
+	attribute_container_unregister(&i->t.target_attrs);
+	attribute_container_unregister(&i->t.host_attrs);
+
 	kfree(i);
 }
 EXPORT_SYMBOL(fc_release_transport);
diff -Nru a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
--- a/drivers/scsi/scsi_transport_iscsi.c	2005-02-03 18:29:36 -08:00
+++ b/drivers/scsi/scsi_transport_iscsi.c	2005-02-03 18:29:36 -08:00
@@ -356,6 +356,10 @@
 void iscsi_release_transport(struct scsi_transport_template *t)
 {
 	struct iscsi_internal *i = to_iscsi_internal(t);
+
+	attribute_container_unregister(&i->t.target_attrs);
+	attribute_container_unregister(&i->t.host_attrs);
+
 	kfree(i);
 }
 
diff -Nru a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
--- a/drivers/scsi/scsi_transport_spi.c	2005-02-03 18:29:36 -08:00
+++ b/drivers/scsi/scsi_transport_spi.c	2005-02-03 18:29:36 -08:00
@@ -921,6 +921,9 @@
 {
 	struct spi_internal *i = to_spi_internal(t);
 
+	attribute_container_unregister(&i->t.target_attrs);
+	attribute_container_unregister(&i->t.host_attrs);
+
 	kfree(i);
 }
 EXPORT_SYMBOL(spi_release_transport);
