linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: "Matthew R. Ochs" <mrochs@linux.vnet.ibm.com>
To: linux-scsi@vger.kernel.org,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	"Nicholas A. Bellinger" <nab@linux-iscsi.org>,
	Brian King <brking@linux.vnet.ibm.com>,
	Ian Munsie <imunsie@au1.ibm.com>,
	Daniel Axtens <dja@ozlabs.au.ibm.com>,
	Andrew Donnellan <andrew.donnellan@au1.ibm.com>,
	Tomas Henzl <thenzl@redhat.com>,
	David Laight <David.Laight@ACULAB.COM>
Cc: Michael Neuling <mikey@neuling.org>,
	linuxppc-dev@lists.ozlabs.org,
	"Manoj N. Kumar" <manoj@linux.vnet.ibm.com>
Subject: [PATCH v3 25/32] cxlflash: Fix to prevent EEH recovery failure
Date: Thu, 24 Sep 2015 14:41:53 -0500	[thread overview]
Message-ID: <1443123713-17622-1-git-send-email-mrochs@linux.vnet.ibm.com> (raw)
In-Reply-To: <1443123193-16498-1-git-send-email-mrochs@linux.vnet.ibm.com>

The process_sense() routine can perform a read capacity which
can take some time to complete. If an EEH occurs while waiting
on the read capacity, the EEH handler is unable to obtain the
context's mutex in order to put the context in an error state.
The EEH handler will sit and wait until the context is free,
but this wait can last longer than the EEH handler tolerates,
leading to a failed recovery.

To address this issue, make the context unavailable to new,
non-system owned threads and release the context while calling
into process_sense(). After returning from process_sense() the
context mutex is reacquired and the context is made available
again. The context can be safely moved to the error state if
needed during the unavailable window as no other threads will
hold its reference.

Signed-off-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>
Reviewed-by: Brian King <brking@linux.vnet.ibm.com>
---
 drivers/scsi/cxlflash/superpipe.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/scsi/cxlflash/superpipe.c b/drivers/scsi/cxlflash/superpipe.c
index 329b27e..e2b28ea 100644
--- a/drivers/scsi/cxlflash/superpipe.c
+++ b/drivers/scsi/cxlflash/superpipe.c
@@ -1789,12 +1789,21 @@ static int cxlflash_disk_verify(struct scsi_device *sdev,
 	 * inquiry (i.e. the Unit attention is due to the WWN changing).
 	 */
 	if (verify->hint & DK_CXLFLASH_VERIFY_HINT_SENSE) {
+		/* Can't hold mutex across process_sense/read_cap16,
+		 * since we could have an intervening EEH event.
+		 */
+		ctxi->unavail = true;
+		mutex_unlock(&ctxi->mutex);
 		rc = process_sense(sdev, verify);
 		if (unlikely(rc)) {
 			dev_err(dev, "%s: Failed to validate sense data (%d)\n",
 				__func__, rc);
+			mutex_lock(&ctxi->mutex);
+			ctxi->unavail = false;
 			goto out;
 		}
+		mutex_lock(&ctxi->mutex);
+		ctxi->unavail = false;
 	}
 
 	switch (gli->mode) {
-- 
2.1.0

  parent reply	other threads:[~2015-09-24 19:42 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-24 19:33 [PATCH v3 00/32] cxlflash: Miscellaneous bug fixes and corrections Matthew R. Ochs
2015-09-24 19:36 ` [PATCH v3 01/32] cxlflash: Fix to avoid invalid port_sel value Matthew R. Ochs
2015-09-24 19:37 ` [PATCH v3 02/32] cxlflash: Replace magic numbers with literals Matthew R. Ochs
2015-09-24 19:37 ` [PATCH v3 03/32] cxlflash: Fix read capacity timeout Matthew R. Ochs
2015-09-24 19:37 ` [PATCH v3 04/32] cxlflash: Fix potential oops following LUN removal Matthew R. Ochs
2015-09-25  1:10   ` Brian King
2015-09-24 19:37 ` [PATCH v3 05/32] cxlflash: Fix data corruption when vLUN used over multiple cards Matthew R. Ochs
2015-09-24 19:37 ` [PATCH v3 06/32] cxlflash: Fix to avoid sizeof(bool) Matthew R. Ochs
2015-09-24 19:38 ` [PATCH v3 07/32] cxlflash: Fix context encode mask width Matthew R. Ochs
2015-09-24 19:38 ` [PATCH v3 08/32] cxlflash: Fix to avoid CXL services during EEH Matthew R. Ochs
2015-09-25  1:23   ` Brian King
2015-09-25 17:09     ` Matthew R. Ochs
2015-09-24 19:38 ` [PATCH v3 09/32] cxlflash: Correct naming of limbo state and waitq Matthew R. Ochs
2015-09-24 19:38 ` [PATCH v3 10/32] cxlflash: Make functions static Matthew R. Ochs
2015-09-24 19:39 ` [PATCH v3 11/32] cxlflash: Refine host/device attributes Matthew R. Ochs
2015-09-24 19:47   ` Matthew R. Ochs
2015-09-25  1:28   ` Brian King
2015-09-24 19:39 ` [PATCH v3 12/32] cxlflash: Fix to avoid spamming the kernel log Matthew R. Ochs
2015-09-24 19:39 ` [PATCH v3 13/32] cxlflash: Fix to avoid stall while waiting on TMF Matthew R. Ochs
2015-09-25 20:32   ` Brian King
2015-09-24 19:39 ` [PATCH v3 14/32] cxlflash: Fix location of setting resid Matthew R. Ochs
2015-09-24 19:39 ` [PATCH v3 15/32] cxlflash: Fix host link up event handling Matthew R. Ochs
2015-09-24 19:39 ` [PATCH v3 16/32] cxlflash: Fix async interrupt bypass logic Matthew R. Ochs
2015-09-24 19:39 ` [PATCH v3 17/32] cxlflash: Remove dual port online dependency Matthew R. Ochs
2015-09-24 19:39 ` [PATCH v3 18/32] cxlflash: Fix AFU version access/storage and add check Matthew R. Ochs
2015-09-24 19:40 ` [PATCH v3 19/32] cxlflash: Correct usage of scsi_host_put() Matthew R. Ochs
2015-09-25 20:35   ` Brian King
2015-09-24 19:41 ` [PATCH v3 20/32] cxlflash: Fix to prevent workq from accessing freed memory Matthew R. Ochs
2015-09-25 20:37   ` Brian King
2015-09-24 19:41 ` [PATCH v3 21/32] cxlflash: Correct behavior in device reset handler following EEH Matthew R. Ochs
2015-09-24 19:41 ` [PATCH v3 22/32] cxlflash: Remove unnecessary scsi_block_requests Matthew R. Ochs
2015-09-24 19:41 ` [PATCH v3 23/32] cxlflash: Fix function prolog parameters and return codes Matthew R. Ochs
2015-09-24 19:41 ` [PATCH v3 24/32] cxlflash: Fix MMIO and endianness errors Matthew R. Ochs
2015-09-24 19:41 ` Matthew R. Ochs [this message]
2015-09-24 19:42 ` [PATCH v3 26/32] cxlflash: Correct spelling, grammar, and alignment mistakes Matthew R. Ochs
2015-09-24 19:42 ` [PATCH v3 27/32] cxlflash: Fix to prevent stale AFU RRQ Matthew R. Ochs
2015-09-24 19:42 ` [PATCH v3 28/32] cxlflash: Fix to avoid state change collision Matthew R. Ochs
2015-09-25 21:10   ` Brian King
2015-09-25 22:31     ` Matthew R. Ochs
2015-09-24 19:44 ` [PATCH v3 29/32] MAINTAINERS: Add cxlflash driver Matthew R. Ochs
2015-09-25  1:08   ` Andrew Donnellan
2015-09-24 19:44 ` [PATCH v3 30/32] cxlflash: Fix to double the delay each time Matthew R. Ochs
2015-09-25 21:12   ` Brian King
2015-09-24 19:44 ` [PATCH v3 31/32] cxlflash: Fix to avoid corrupting adapter fops Matthew R. Ochs
2015-09-25 21:23   ` Brian King
2015-09-25 22:35     ` Matthew R. Ochs
2015-09-24 19:44 ` [PATCH v3 32/32] cxlflash: Correct trace string Matthew R. Ochs
2015-09-25 21:24   ` Brian King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1443123713-17622-1-git-send-email-mrochs@linux.vnet.ibm.com \
    --to=mrochs@linux.vnet.ibm.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=andrew.donnellan@au1.ibm.com \
    --cc=brking@linux.vnet.ibm.com \
    --cc=dja@ozlabs.au.ibm.com \
    --cc=imunsie@au1.ibm.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=manoj@linux.vnet.ibm.com \
    --cc=mikey@neuling.org \
    --cc=nab@linux-iscsi.org \
    --cc=thenzl@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).