Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8a18d2d authored by Asai Thambi SP's avatar Asai Thambi SP Committed by Jens Axboe
Browse files

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 in FTL rebuild process.

Signed-off-by: default avatarSelvan Mani <smani@micron.com>
Signed-off-by: default avatarVignesh Gunasekaran <vgunasekaran@micron.com>
Signed-off-by: default avatarAsai Thambi S P <asamymuthupa@micron.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 5b7e0a8a
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -3260,21 +3260,26 @@ static int mtip_hw_init(struct driver_data *dd)
	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;
}

/*
 * Called to deinitialize an interface.
@@ -3331,8 +3336,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;
}
@@ -3355,7 +3359,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;