[PATCH 05/10] mtip32xx: Avoid issuing standby immediate cmd during FTL rebuild

2016-02-22 Thread Asai Thambi SP

Prevent standby immediate command from being issued in remove,
suspend and shutdown paths, while drive is performing FTL rebuild
process.

Signed-off-by: Selvan Mani 
Signed-off-by: Vignesh Gunasekaran 
Signed-off-by: Asai Thambi S P 
---
 drivers/block/mtip32xx/mtip32xx.c |   20 
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/block/mtip32xx/mtip32xx.c 
b/drivers/block/mtip32xx/mtip32xx.c
index ca9d35a..ba832a8 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -3329,20 +3329,25 @@ out1:
 return rv;
 }
 
-static void mtip_standby_drive(struct driver_data *dd)
+static int mtip_standby_drive(struct driver_data *dd)
 {
-if (dd->sr)
-return;
+int rv = 0;
 
+if (dd->sr || !dd->port)
+return -ENODEV;
 /*
  * Send standby immediate (E0h) to the drive so that it
  * saves its state.
  */
 if (!test_bit(MTIP_PF_REBUILD_BIT, >port->flags) &&
-!test_bit(MTIP_DDF_SEC_LOCK_BIT, >dd_flag))
-if (mtip_standby_immediate(dd->port))
+!test_bit(MTIP_DDF_REBUILD_FAILED_BIT, >dd_flag) &&
+!test_bit(MTIP_DDF_SEC_LOCK_BIT, >dd_flag)) {
+rv = mtip_standby_immediate(dd->port);
+if (rv)
 dev_warn(>pdev->dev,
 "STANDBY IMMEDIATE failed\n");
+}
+return rv;
 }
 
 /*
@@ -3400,8 +3405,7 @@ static int mtip_hw_shutdown(struct driver_data *dd)
  * Send standby immediate (E0h) to the drive so that it
  * saves its state.
  */
-if (!dd->sr && dd->port)
-mtip_standby_immediate(dd->port);
+mtip_standby_drive(dd);
 
 return 0;
 }
@@ -3424,7 +3428,7 @@ static int mtip_hw_suspend(struct driver_data *dd)
  * Send standby immediate (E0h) to the drive
  * so that it saves its state.
  */
-if (mtip_standby_immediate(dd->port) != 0) {
+if (mtip_standby_drive(dd) != 0) {
 dev_err(>pdev->dev,
 "Failed standby-immediate command\n");
 return -EFAULT;
-- 
1.7.1




[PATCH 05/10] mtip32xx: Avoid issuing standby immediate cmd during FTL rebuild

2016-02-22 Thread Asai Thambi SP

Prevent standby immediate command from being issued in remove,
suspend and shutdown paths, while drive is performing FTL rebuild
process.

Signed-off-by: Selvan Mani 
Signed-off-by: Vignesh Gunasekaran 
Signed-off-by: Asai Thambi S P 
---
 drivers/block/mtip32xx/mtip32xx.c |   20 
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/block/mtip32xx/mtip32xx.c 
b/drivers/block/mtip32xx/mtip32xx.c
index ca9d35a..ba832a8 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -3329,20 +3329,25 @@ out1:
 return rv;
 }
 
-static void mtip_standby_drive(struct driver_data *dd)
+static int mtip_standby_drive(struct driver_data *dd)
 {
-if (dd->sr)
-return;
+int rv = 0;
 
+if (dd->sr || !dd->port)
+return -ENODEV;
 /*
  * Send standby immediate (E0h) to the drive so that it
  * saves its state.
  */
 if (!test_bit(MTIP_PF_REBUILD_BIT, >port->flags) &&
-!test_bit(MTIP_DDF_SEC_LOCK_BIT, >dd_flag))
-if (mtip_standby_immediate(dd->port))
+!test_bit(MTIP_DDF_REBUILD_FAILED_BIT, >dd_flag) &&
+!test_bit(MTIP_DDF_SEC_LOCK_BIT, >dd_flag)) {
+rv = mtip_standby_immediate(dd->port);
+if (rv)
 dev_warn(>pdev->dev,
 "STANDBY IMMEDIATE failed\n");
+}
+return rv;
 }
 
 /*
@@ -3400,8 +3405,7 @@ static int mtip_hw_shutdown(struct driver_data *dd)
  * Send standby immediate (E0h) to the drive so that it
  * saves its state.
  */
-if (!dd->sr && dd->port)
-mtip_standby_immediate(dd->port);
+mtip_standby_drive(dd);
 
 return 0;
 }
@@ -3424,7 +3428,7 @@ static int mtip_hw_suspend(struct driver_data *dd)
  * Send standby immediate (E0h) to the drive
  * so that it saves its state.
  */
-if (mtip_standby_immediate(dd->port) != 0) {
+if (mtip_standby_drive(dd) != 0) {
 dev_err(>pdev->dev,
 "Failed standby-immediate command\n");
 return -EFAULT;
-- 
1.7.1