rpms/kernel/F-8 linux-2.6-libata-always-do-follow-up-SRST-if-requested.patch, NONE, 1.1 linux-2.6-libata-fix-EH-action-overwriting-in-ata_eh_reset.patch, NONE, 1.1 linux-2.6-libata-sata_nv-disable-swncq.patch, NONE, 1.1 kernel.spec, 1.553, 1.554

Chuck Ebbert cebbert at fedoraproject.org
Tue Oct 14 08:17:29 UTC 2008


Author: cebbert

Update of /cvs/pkgs/rpms/kernel/F-8
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv24017

Modified Files:
	kernel.spec 
Added Files:
	linux-2.6-libata-always-do-follow-up-SRST-if-requested.patch 
	linux-2.6-libata-fix-EH-action-overwriting-in-ata_eh_reset.patch 
	linux-2.6-libata-sata_nv-disable-swncq.patch 
Log Message:
Three libata fixes from F9:
  libata: always do follow-up SRST if hardreset returned -EAGAIN
  libata: fix EH action overwriting in ata_eh_reset()
  libata: sata_nv: SWNCQ should be disabled by default (#463034)

linux-2.6-libata-always-do-follow-up-SRST-if-requested.patch:

--- NEW FILE linux-2.6-libata-always-do-follow-up-SRST-if-requested.patch ---
From: Tejun Heo <tj at kernel.org>
Date: Thu, 31 Jul 2008 07:08:02 +0000 (+0900)
Subject: libata: always do follow-up SRST if hardreset returned -EAGAIN
X-Git-Tag: v2.6.27-rc5~51^2~6
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=5dbfc9cb59d4ad75199949d7dd8a8c6d7bc518df

libata: always do follow-up SRST if hardreset returned -EAGAIN

As an optimization, follow-up SRST used to be skipped if
classification wasn't requested even when hardreset requested it via
-EAGAIN.  However, some hardresets can't wait for device readiness and
skipping SRST can cause timeout or other failures during revalidation.
Always perform follow-up SRST if hardreset returns -EAGAIN.  This
makes reset paths more predictable and thus less error-prone.

While at it, move hardreset error checking such that it's done right
after hardreset is finished.  This simplifies followup SRST condition
check a bit and makes the reset path easier to modify.

Signed-off-by: Tejun Heo <tj at kernel.org>
Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
---

diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index c98909b..d4dad47 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2171,18 +2171,12 @@ static int ata_do_reset(struct ata_link *link, ata_reset_fn_t reset,
 }
 
 static int ata_eh_followup_srst_needed(struct ata_link *link,
-				       int rc, int classify,
-				       const unsigned int *classes)
+				       int rc, const unsigned int *classes)
 {
 	if ((link->flags & ATA_LFLAG_NO_SRST) || ata_link_offline(link))
 		return 0;
-	if (rc == -EAGAIN) {
-		if (classify)
-			return 1;
-		rc = 0;
-	}
-	if (rc != 0)
-		return 0;
+	if (rc == -EAGAIN)
+		return 1;
 	if (sata_pmp_supported(link->ap) && ata_is_host_link(link))
 		return 1;
 	return 0;
@@ -2309,9 +2303,11 @@ int ata_eh_reset(struct ata_link *link, int classify,
 			ehc->i.flags |= ATA_EHI_DID_SOFTRESET;
 
 		rc = ata_do_reset(link, reset, classes, deadline);
+		if (rc && rc != -EAGAIN)
+			goto fail;
 
 		if (reset == hardreset &&
-		    ata_eh_followup_srst_needed(link, rc, classify, classes)) {
+		    ata_eh_followup_srst_needed(link, rc, classes)) {
 			/* okay, let's do follow-up softreset */
 			reset = softreset;
 
@@ -2326,10 +2322,6 @@ int ata_eh_reset(struct ata_link *link, int classify,
 			ata_eh_about_to_do(link, NULL, ATA_EH_RESET);
 			rc = ata_do_reset(link, reset, classes, deadline);
 		}
-
-		/* -EAGAIN can happen if we skipped followup SRST */
-		if (rc && rc != -EAGAIN)
-			goto fail;
 	} else {
 		if (verbose)
 			ata_link_printk(link, KERN_INFO, "no reset method "

linux-2.6-libata-fix-EH-action-overwriting-in-ata_eh_reset.patch:

--- NEW FILE linux-2.6-libata-fix-EH-action-overwriting-in-ata_eh_reset.patch ---
Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a674050e068a2919908730279f0b731ae6d2e005
Commit:     a674050e068a2919908730279f0b731ae6d2e005
Parent:     eb3a55a9f43f0f8e770c2abf70e65bdda2d5ff1e
Author:     Tejun Heo <tj at kernel.org>
AuthorDate: Thu Jul 31 16:07:04 2008 +0900
Committer:  Jeff Garzik <jgarzik at redhat.com>
CommitDate: Fri Aug 22 02:19:39 2008 -0400

    libata: fix EH action overwriting in ata_eh_reset()
    
    ehc->i.action got accidentally overwritten to ATA_EH_HARD/SOFTRESET in
    ata_eh_reset().  The original intention was to clear reset action
    which wasn't selected.  This can cause unexpected behavior when other
    EH actions are scheduled together with reset.  Fix it.
    
    Signed-off-by: Tejun Heo <tj at kernel.org>
    Signed-off-by: Jeff Garzik <jgarzik at redhat.com>
---
 drivers/ata/libata-eh.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index a570ca4..c98909b 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2251,10 +2251,10 @@ int ata_eh_reset(struct ata_link *link, int classify,
 	ehc->i.action &= ~ATA_EH_RESET;
 	if (hardreset) {
 		reset = hardreset;
-		ehc->i.action = ATA_EH_HARDRESET;
+		ehc->i.action |= ATA_EH_HARDRESET;
 	} else if (softreset) {
 		reset = softreset;
-		ehc->i.action = ATA_EH_SOFTRESET;
+		ehc->i.action |= ATA_EH_SOFTRESET;
 	}
 
 	if (prereset) {

linux-2.6-libata-sata_nv-disable-swncq.patch:

--- NEW FILE linux-2.6-libata-sata_nv-disable-swncq.patch ---
From: Chuck Ebbert <cebbert at redhat.com>
Subject: ata: sata_nv SWNCQ should be disabled by default
Reverts: d21279f4125893c63ec285962e1f2164b4d71117

libata: sata_nv: SWNCQ should be disabled by default

https://bugzilla.redhat.com/show_bug.cgi?id=463034

Signed-off-by: Chuck Ebbert <cebbert at redhat.com>
---

diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c
index b2eb572..8bb8ba1 100644
--- a/drivers/ata/sata_nv.c
+++ b/drivers/ata/sata_nv.c
@@ -532,7 +532,7 @@ MODULE_DEVICE_TABLE(pci, nv_pci_tbl);
 MODULE_VERSION(DRV_VERSION);
 
 static int adma_enabled;
-static int swncq_enabled = 1;
+static int swncq_enabled;
 
 static void nv_adma_register_mode(struct ata_port *ap)
 {
@@ -2485,7 +2485,7 @@ module_exit(nv_exit);
 module_init(nv_init);
 module_exit(nv_exit);
 module_param_named(adma, adma_enabled, bool, 0444);
-MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: true)");
+MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)");
 module_param_named(swncq, swncq_enabled, bool, 0444);
-MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)");
+MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: false)");
 


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.553
retrieving revision 1.554
diff -u -r1.553 -r1.554
--- kernel.spec	13 Oct 2008 18:56:21 -0000	1.553
+++ kernel.spec	14 Oct 2008 08:16:58 -0000	1.554
@@ -651,11 +651,14 @@
 
 Patch670: linux-2.6-ata-quirk.patch
 Patch671: linux-2.6-libata-pata_it821x-driver-updates-and-reworking.patch
-Patch674: linux-2.6-sata-eeepc-faster.patch
-Patch675: linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch
-Patch676: linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch
-Patch677: linux-2.6-libata-lba-28-48-off-by-one-in-ata.h.patch
-Patch678: linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch
+Patch672: linux-2.6-sata-eeepc-faster.patch
+Patch673: linux-2.6-libata-pata_marvell-play-nice-with-ahci.patch
+Patch674: linux-2.6-libata-fix-a-large-collection-of-DMA-mode-mismatches.patch
+Patch675: linux-2.6-libata-lba-28-48-off-by-one-in-ata.h.patch
+Patch676: linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch
+Patch677: linux-2.6-libata-always-do-follow-up-SRST-if-requested.patch
+Patch678: linux-2.6-libata-fix-EH-action-overwriting-in-ata_eh_reset.patch
+Patch679: linux-2.6-libata-sata_nv-disable-swncq.patch
 
 Patch680: linux-2.6-wireless.patch
 Patch681: linux-2.6-wireless-pending.patch
@@ -1191,6 +1194,11 @@
 ApplyPatch linux-2.6-libata-lba-28-48-off-by-one-in-ata.h.patch
 # kill warn_on reported by kerneloops
 ApplyPatch linux-2.6-libata-sff-kill-spurious-WARN_ON-in-ata_hsm_move.patch
+# fix libata error handling
+ApplyPatch linux-2.6-libata-always-do-follow-up-SRST-if-requested.patch
+ApplyPatch linux-2.6-libata-fix-EH-action-overwriting-in-ata_eh_reset.patch
+# disable swncq on sata_nv
+ApplyPatch linux-2.6-libata-sata_nv-disable-swncq.patch
 
 # wireless
 #
@@ -1871,6 +1879,12 @@
 
 
 %changelog
+* Tue Oct 14 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.26.6-44
+- Three libata fixes from F9:
+  libata: always do follow-up SRST if hardreset returned -EAGAIN
+  libata: fix EH action overwriting in ata_eh_reset()
+  libata: sata_nv: SWNCQ should be disabled by default (#463034)
+
 * Mon Oct 13 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.26.6-43
 - x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap.
 




More information about the fedora-extras-commits mailing list