All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [SCSI] mpt3sas: Fix secure erase premature termination.
@ 2016-10-30 12:43 ` Andrey Grodzovsky
  0 siblings, 0 replies; 31+ messages in thread
From: Andrey Grodzovsky @ 2016-10-30 12:43 UTC (permalink / raw)
  To: MPT-FusionLinux.pdl
  Cc: Andrey Grodzovsky, linux-scsi, Sathya Prakash, Chaitra P B,
	Suganath Prabu Subramani, Sreekanth Reddy, Hannes Reinecke,
	stable

Problem:
This is a work around for a bug with LSI Fusion MPT SAS2 when
pefroming secure erase. Due to the very long time the operation
takes commands issued during the erase will time out and will trigger
execution of abort hook. Even though the abort hook is called for
the specifc command which timed out this leads to entire device halt
(scsi_state terminated) and premature termination of the secured erase.

Fix:
Set device state to busy while erase in progress to reject any incoming
commands until the erase is done. The device is blocked any way during
this time and cannot execute any other command.
More data and logs can be found here -
https://drive.google.com/file/d/0B9ocOHYHbbS1Q3VMdkkzeWFkTjg/view

Signed-off-by: Andrey Grodzovsky <andrey2805@gmail.com>
Cc: <linux-scsi@vger.kernel.org>
Cc: Sathya Prakash <sathya.prakash@broadcom.com>
Cc: Chaitra P B <chaitra.basappa@broadcom.com>
Cc: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
Cc: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: <stable@vger.kernel.org>
---
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git [PATCH]drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 5a97e32..5542dd02 100644
--- [PATCH]drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -3500,6 +3500,23 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
 	    SAM_STAT_CHECK_CONDITION;
 }
 
+/**
+ * This is a work around for a bug with LSI Fusion MPT SAS2 when
+ * pefroming secure erase. Due to the verly long time the operation
+ * takes commands issued during the erase will time out and will trigger
+ * execution of abort hook. This leads to device reset and premature
+ * termination of the secured erase.
+ */
+static inline bool disk_erase_command(struct scsi_cmnd *scmd)
+{
+   /**
+   * Identify secure erase command according to
+   * ATA/ATAPI Command Set (ATA8-ACS) p.202
+   */
+   return scmd->cmd_len == 16 && scmd->cmnd[14] == 0xf4;
+}
+
+
 
 /**
  * _scsih_qcmd - main scsi request entry point
@@ -3528,6 +3545,14 @@ _scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
 		scsi_print_command(scmd);
 #endif
 
+   /**
+	* Lock the device for any subsequent command until secured erase
+	* command is done.
+	*/
+	if (disk_erase_command(scmd))
+		scsi_internal_device_block(scmd->device);
+
+
 	sas_device_priv_data = scmd->device->hostdata;
 	if (!sas_device_priv_data || !sas_device_priv_data->sas_target) {
 		scmd->result = DID_NO_CONNECT << 16;
@@ -4062,6 +4087,11 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply)
 	if (scmd == NULL)
 		return 1;
 
+	/* Secured erase is done. Unlock the device */
+	if (disk_erase_command(scmd))
+		scsi_internal_device_unblock(scmd->device, SDEV_RUNNING);
+
+
 	mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
 
 	if (mpi_reply == NULL) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2018-04-24 12:33 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-30 12:43 [PATCH] [SCSI] mpt3sas: Fix secure erase premature termination Andrey Grodzovsky
2016-10-30 12:43 ` Andrey Grodzovsky
2016-10-30 18:43 ` Hannes Reinecke
2016-10-30 18:43   ` Hannes Reinecke
2016-11-02  0:09   ` [PATCH] [SCSI] mpt3sas: Fix secure erase premature termination (v2) Andrey Grodzovsky
2016-11-02  0:09     ` Andrey Grodzovsky
2016-11-02  2:07     ` Hannes Reinecke
2016-11-02  2:07       ` Hannes Reinecke
2016-11-02 10:05       ` Sreekanth Reddy
     [not found]         ` <CAJphD_qrQftfCOn_uzXCfdX=Xv9BYvVQ60AZ4DR2rc3gfXQa_Q@mail.gmail.com>
     [not found]           ` <30w645ulbhlofxrk1h4a9q3s.1478144944778@email.android.com>
2016-11-04 12:45             ` Sreekanth Reddy
2016-11-04 14:51               ` Hannes Reinecke
2016-11-04 16:35                 ` Martin K. Petersen
2016-11-04 16:35                   ` Martin K. Petersen
2018-04-24  9:09                   ` Steffen Maier
2018-04-24 12:33                     ` Hannes Reinecke
2016-11-05 13:17                 ` Andrey Grodzovsky
2016-11-10 12:07                   ` Sreekanth Reddy
2016-11-10 13:42                     ` [PATCH] [SCSI] mpt3sas: Fix secure erase premature termination (v3) Andrey Grodzovsky
2016-11-10 13:42                       ` Andrey Grodzovsky
2016-11-10 13:54                       ` Greg KH
2016-11-10 14:35                         ` [PATCH] [SCSI] mpt3sas: Fix secure erase premature termination (v4) Andrey Grodzovsky
2016-11-10 14:35                           ` Andrey Grodzovsky
2016-11-11  4:38                           ` Sreekanth Reddy
2018-04-23 18:28                             ` Igor Rybak
2018-04-24  7:25                               ` Greg KH
2016-11-12 15:29                           ` Martin K. Petersen
2016-11-12 15:29                             ` Martin K. Petersen
2016-11-12 16:36                             ` Andrey Grodzovsky
2016-11-14 23:30                               ` Martin K. Petersen
2016-11-17  1:15                                 ` [PATCH] [SCSI] mpt2sas: Fix secure erase premature termination Andrey Grodzovsky
2016-11-17  7:11                                   ` Greg KH

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.