[<prev] [next>] [day] [month] [year] [list]
Message-ID: <431f1232-2912-a0d1-b416-8dd4e7179d2f@micron.com>
Date: Mon, 22 Feb 2016 21:01:21 -0800
From: Asai Thambi SP <asamymuthupa@...ron.com>
To: Jens Axboe <axboe@...nel.dk>
CC: <linux-kernel@...r.kernel.org>,
Sam Bradshaw <sbradshaw@...ron.com>,
Selvan Mani <smani@...ron.com>,
Rajesh Kumar Sambandam <rsambandam@...ron.com>,
Vignesh Gunasekaran <vgunasekaran@...ron.com>
Subject: [PATCH 05/10] mtip32xx: Avoid issuing standby immediate cmd during
FTL rebuild
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 <smani@...ron.com>
Signed-off-by: Vignesh Gunasekaran <vgunasekaran@...ron.com>
Signed-off-by: Asai Thambi S P <asamymuthupa@...ron.com>
---
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, &dd->port->flags) &&
- !test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag))
- if (mtip_standby_immediate(dd->port))
+ !test_bit(MTIP_DDF_REBUILD_FAILED_BIT, &dd->dd_flag) &&
+ !test_bit(MTIP_DDF_SEC_LOCK_BIT, &dd->dd_flag)) {
+ rv = mtip_standby_immediate(dd->port);
+ if (rv)
dev_warn(&dd->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(&dd->pdev->dev,
"Failed standby-immediate command\n");
return -EFAULT;
--
1.7.1
Powered by blists - more mailing lists