* [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending
@ 2007-07-31 7:42 Tejun Heo
2007-07-31 7:51 ` [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report() Tejun Heo
2007-08-01 5:56 ` [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending Tejun Heo
0 siblings, 2 replies; 8+ messages in thread
From: Tejun Heo @ 2007-07-31 7:42 UTC (permalink / raw)
To: Jeff Garzik, linux-ide, mikpe
Don't skip EH report if action is pending.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
drivers/ata/libata-eh.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: work/drivers/ata/libata-eh.c
===================================================================
--- work.orig/drivers/ata/libata-eh.c
+++ work/drivers/ata/libata-eh.c
@@ -1675,7 +1675,7 @@ static void ata_eh_report(struct ata_por
nr_failed++;
}
- if (!nr_failed && !ehc->i.err_mask)
+ if (!nr_failed && !ehc->i.err_mask && !ehc->i.action)
return;
frozen = "";
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report()
2007-07-31 7:42 [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending Tejun Heo
@ 2007-07-31 7:51 ` Tejun Heo
2007-08-15 8:52 ` Jeff Garzik
2007-08-01 5:56 ` [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending Tejun Heo
1 sibling, 1 reply; 8+ messages in thread
From: Tejun Heo @ 2007-07-31 7:51 UTC (permalink / raw)
To: Jeff Garzik, linux-ide, mikpe
EH is sometimes repeated without any error or action. For example,
this happens when probing IDENTIFY fails because of a phantom device.
In these cases, all the repeated EH does is making sure there is no
unhandled error or pending action and return. This repeation is
necessary to avoid losing any event which occurred while EH was in
progress.
Unfortunately, this dry run causes annonying "EH pending after
completion" message. This patch moves the repeat reporting into
ata_eh_report() such that it's more compact and skipped on dry runs.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Mikael Pettersson <mikep@it.uu.se>
---
Mikael, please verify this removes the annonying message you're
seeing.
Thanks.
drivers/ata/libata-eh.c | 26 ++++++++++++++++----------
include/linux/libata.h | 5 +++--
2 files changed, 19 insertions(+), 12 deletions(-)
Index: work/drivers/ata/libata-eh.c
===================================================================
--- work.orig/drivers/ata/libata-eh.c
+++ work/drivers/ata/libata-eh.c
@@ -290,7 +290,7 @@ enum scsi_eh_timer_return ata_scsi_timed
void ata_scsi_error(struct Scsi_Host *host)
{
struct ata_port *ap = ata_shost_to_port(host);
- int i, repeat_cnt = ATA_EH_MAX_REPEAT;
+ int i;
unsigned long flags;
DPRINTK("ENTER\n");
@@ -356,6 +356,9 @@ void ata_scsi_error(struct Scsi_Host *ho
__ata_port_freeze(ap);
spin_unlock_irqrestore(ap->lock, flags);
+
+ /* initialize eh_tries */
+ ap->eh_tries = ATA_EH_MAX_TRIES;
} else
spin_unlock_wait(ap->lock);
@@ -396,15 +399,12 @@ void ata_scsi_error(struct Scsi_Host *ho
spin_lock_irqsave(ap->lock, flags);
if (ap->pflags & ATA_PFLAG_EH_PENDING) {
- if (--repeat_cnt) {
- ata_port_printk(ap, KERN_INFO,
- "EH pending after completion, "
- "repeating EH (cnt=%d)\n", repeat_cnt);
+ if (--ap->eh_tries) {
spin_unlock_irqrestore(ap->lock, flags);
goto repeat;
}
ata_port_printk(ap, KERN_ERR, "EH pending after %d "
- "tries, giving up\n", ATA_EH_MAX_REPEAT);
+ "tries, giving up\n", ATA_EH_MAX_TRIES);
ap->pflags &= ~ATA_PFLAG_EH_PENDING;
}
@@ -1658,6 +1658,7 @@ static void ata_eh_report(struct ata_por
{
struct ata_eh_context *ehc = &ap->eh_context;
const char *frozen, *desc;
+ char tries_buf[6];
int tag, nr_failed = 0;
desc = NULL;
@@ -1682,18 +1683,23 @@ static void ata_eh_report(struct ata_por
if (ap->pflags & ATA_PFLAG_FROZEN)
frozen = " frozen";
+ memset(tries_buf, 0, sizeof(tries_buf));
+ if (ap->eh_tries < ATA_EH_MAX_TRIES)
+ snprintf(tries_buf, sizeof(tries_buf) - 1, " t%d",
+ ap->eh_tries);
+
if (ehc->i.dev) {
ata_dev_printk(ehc->i.dev, KERN_ERR, "exception Emask 0x%x "
- "SAct 0x%x SErr 0x%x action 0x%x%s\n",
+ "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
ehc->i.err_mask, ap->sactive, ehc->i.serror,
- ehc->i.action, frozen);
+ ehc->i.action, frozen, tries_buf);
if (desc)
ata_dev_printk(ehc->i.dev, KERN_ERR, "%s\n", desc);
} else {
ata_port_printk(ap, KERN_ERR, "exception Emask 0x%x "
- "SAct 0x%x SErr 0x%x action 0x%x%s\n",
+ "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
ehc->i.err_mask, ap->sactive, ehc->i.serror,
- ehc->i.action, frozen);
+ ehc->i.action, frozen, tries_buf);
if (desc)
ata_port_printk(ap, KERN_ERR, "%s\n", desc);
}
Index: work/include/linux/libata.h
===================================================================
--- work.orig/include/linux/libata.h
+++ work/include/linux/libata.h
@@ -287,8 +287,8 @@ enum {
ATA_EHI_DID_RESET = ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET,
ATA_EHI_RESET_MODIFIER_MASK = ATA_EHI_RESUME_LINK,
- /* max repeat if error condition is still set after ->error_handler */
- ATA_EH_MAX_REPEAT = 5,
+ /* max tries if error condition is still set after ->error_handler */
+ ATA_EH_MAX_TRIES = 5,
/* how hard are we gonna try to probe/recover devices */
ATA_PROBE_MAX_TRIES = 3,
@@ -537,6 +537,7 @@ struct ata_port {
struct ata_eh_info eh_info;
/* EH context owned by EH */
struct ata_eh_context eh_context;
+ int eh_tries;
struct ata_device device[ATA_MAX_DEVICES];
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report()
@ 2007-07-31 21:27 Mikael Pettersson
2007-08-01 3:38 ` Tejun Heo
0 siblings, 1 reply; 8+ messages in thread
From: Mikael Pettersson @ 2007-07-31 21:27 UTC (permalink / raw)
To: htejun, jeff, linux-ide, mikpe
On Tue, 31 Jul 2007 16:51:00 +0900, Tejun Heo wrote:
> EH is sometimes repeated without any error or action. For example,
> this happens when probing IDENTIFY fails because of a phantom device.
> In these cases, all the repeated EH does is making sure there is no
> unhandled error or pending action and return. This repeation is
> necessary to avoid losing any event which occurred while EH was in
> progress.
>
> Unfortunately, this dry run causes annonying "EH pending after
> completion" message. This patch moves the repeat reporting into
> ata_eh_report() such that it's more compact and skipped on dry runs.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> Cc: Mikael Pettersson <mikep@it.uu.se>
> ---
> Mikael, please verify this removes the annonying message you're
> seeing.
Yes, this patch eliminates the "EH pending after completion" message
I've been getting.
However, patch 1/2 in this set, "don't skip EH report if action is
pending", causes a bunch of new "exception ... frozen" messages:
--- dmesg-2.6.23-rc1 2007-07-23 12:30:12.000000000 +0200
+++ - 2007-07-31 23:19:21.162137100 +0200
@@ -1,44 +1,44 @@
...
-pata_pdc2027x 0000:04:02.0: PLL input clock 16660 kHz
+pata_pdc2027x 0000:04:02.0: PLL input clock 16651 kHz
scsi0 : pata_pdc2027x
scsi1 : pata_pdc2027x
ata1: PATA max UDMA/133 cmd 0xf88297c0 ctl 0xf8829fda bmdma 0xf8829000 irq 18
ata2: PATA max UDMA/133 cmd 0xf88295c0 ctl 0xf8829dda bmdma 0xf8829008 irq 18
+ata1: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
ata1.00: ATA-7: ST3320620A, 3.AAD, max UDMA/100
ata1.00: 625142448 sectors, multi 16: LBA48
ata1.00: configured for UDMA/100
+ata2: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
scsi 0:0:0:0: Direct-Access ATA ST3320620A 3.AA PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 625142448 512-byte hardware sectors (320073 MB)
sd 0:0:0:0: [sda] Write Protect is off
@@ -255,10 +256,11 @@
scsi3 : ata_piix
ata3: SATA max UDMA/133 cmd 0x0001ec00 ctl 0x0001e882 bmdma 0x0001e400 irq 19
ata4: SATA max UDMA/133 cmd 0x0001e800 ctl 0x0001e482 bmdma 0x0001e408 irq 19
+ata3: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
+ata4: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
ata4.00: ATAPI: TSSTcorpCD/DVDW SH-S183A, SB00, max UDMA/33
ata4.00: applying bridge limits
ata4.00: configured for UDMA/33
-ata4: EH pending after completion, repeating EH (cnt=4)
scsi 3:0:0:0: CD-ROM TSSTcorp CD/DVDW SH-S183A SB00 PQ: 0 ANSI: 5
ata_piix 0000:00:1f.5: MAP [ P0 P2 P1 P3 ]
ACPI: PCI Interrupt 0000:00:1f.5[B] -> GSI 19 (level, low) -> IRQ 19
@@ -267,6 +269,8 @@
scsi5 : ata_piix
ata5: SATA max UDMA/133 cmd 0x0001d400 ctl 0x0001d082 bmdma 0x0001c880 irq 19
ata6: SATA max UDMA/133 cmd 0x0001d000 ctl 0x0001cc02 bmdma 0x0001c888 irq 19
+ata5: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
+ata6: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
kjournald starting. Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
usbcore: registered new interface driver usbfs
This is with both 1/2 and 2/2 applied, with only 2/2 applied the
"EH pending ..." is gone and the new "exception ... frozen" don't appear.
/Mikael
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report()
2007-07-31 21:27 [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report() Mikael Pettersson
@ 2007-08-01 3:38 ` Tejun Heo
0 siblings, 0 replies; 8+ messages in thread
From: Tejun Heo @ 2007-08-01 3:38 UTC (permalink / raw)
To: Mikael Pettersson; +Cc: jeff, linux-ide
Mikael Pettersson wrote:
> This is with both 1/2 and 2/2 applied, with only 2/2 applied the
> "EH pending ..." is gone and the new "exception ... frozen" don't appear.
Thanks. Right, I'll drop the first patch.
--
tejun
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending
2007-07-31 7:42 [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending Tejun Heo
2007-07-31 7:51 ` [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report() Tejun Heo
@ 2007-08-01 5:56 ` Tejun Heo
1 sibling, 0 replies; 8+ messages in thread
From: Tejun Heo @ 2007-08-01 5:56 UTC (permalink / raw)
To: Tejun Heo; +Cc: Jeff Garzik, linux-ide, mikpe
Tejun Heo wrote:
> Don't skip EH report if action is pending.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
Jeff, this patch needs other changes to avoid exception message during
initial probing. Please drop it for now and just apply the second patch.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report()
2007-07-31 7:51 ` [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report() Tejun Heo
@ 2007-08-15 8:52 ` Jeff Garzik
2007-08-18 4:28 ` [PATCH libata-dev#upstream REGENERATED] " Tejun Heo
0 siblings, 1 reply; 8+ messages in thread
From: Jeff Garzik @ 2007-08-15 8:52 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide, mikpe
Tejun Heo wrote:
> EH is sometimes repeated without any error or action. For example,
> this happens when probing IDENTIFY fails because of a phantom device.
> In these cases, all the repeated EH does is making sure there is no
> unhandled error or pending action and return. This repeation is
> necessary to avoid losing any event which occurred while EH was in
> progress.
>
> Unfortunately, this dry run causes annonying "EH pending after
> completion" message. This patch moves the repeat reporting into
> ata_eh_report() such that it's more compact and skipped on dry runs.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> Cc: Mikael Pettersson <mikep@it.uu.se>
> ---
> Mikael, please verify this removes the annonying message you're
> seeing.
>
> Thanks.
>
> drivers/ata/libata-eh.c | 26 ++++++++++++++++----------
> include/linux/libata.h | 5 +++--
> 2 files changed, 19 insertions(+), 12 deletions(-)
this will want a rediff too, but looks OK to me
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH libata-dev#upstream REGENERATED] libata: move EH repeat reporting into ata_eh_report()
2007-08-15 8:52 ` Jeff Garzik
@ 2007-08-18 4:28 ` Tejun Heo
2007-08-31 9:35 ` Jeff Garzik
0 siblings, 1 reply; 8+ messages in thread
From: Tejun Heo @ 2007-08-18 4:28 UTC (permalink / raw)
To: Jeff Garzik; +Cc: linux-ide, mikpe
EH is sometimes repeated without any error or action. For example,
this happens when probing IDENTIFY fails because of a phantom device.
In these cases, all the repeated EH does is making sure there is no
unhandled error or pending action and return. This repeation is
necessary to avoid losing any event which occurred while EH was in
progress.
Unfortunately, this dry run causes annonying "EH pending after
completion" message. This patch moves the repeat reporting into
ata_eh_report() such that it's more compact and skipped on dry runs.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Mikael Pettersson <mikep@it.uu.se>
---
Regenerated against #upstream (41b135c7) +
implement-and-use-ata_port_desc patch.
drivers/ata/libata-eh.c | 30 ++++++++++++++++++------------
include/linux/libata.h | 5 +++--
2 files changed, 21 insertions(+), 14 deletions(-)
Index: work/drivers/ata/libata-eh.c
===================================================================
--- work.orig/drivers/ata/libata-eh.c
+++ work/drivers/ata/libata-eh.c
@@ -358,7 +358,7 @@ enum scsi_eh_timer_return ata_scsi_timed
void ata_scsi_error(struct Scsi_Host *host)
{
struct ata_port *ap = ata_shost_to_port(host);
- int i, repeat_cnt = ATA_EH_MAX_REPEAT;
+ int i;
unsigned long flags;
DPRINTK("ENTER\n");
@@ -424,6 +424,9 @@ void ata_scsi_error(struct Scsi_Host *ho
__ata_port_freeze(ap);
spin_unlock_irqrestore(ap->lock, flags);
+
+ /* initialize eh_tries */
+ ap->eh_tries = ATA_EH_MAX_TRIES;
} else
spin_unlock_wait(ap->lock);
@@ -468,15 +471,12 @@ void ata_scsi_error(struct Scsi_Host *ho
spin_lock_irqsave(ap->lock, flags);
if (ap->pflags & ATA_PFLAG_EH_PENDING) {
- if (--repeat_cnt) {
- ata_port_printk(ap, KERN_INFO,
- "EH pending after completion, "
- "repeating EH (cnt=%d)\n", repeat_cnt);
+ if (--ap->eh_tries) {
spin_unlock_irqrestore(ap->lock, flags);
goto repeat;
}
ata_port_printk(ap, KERN_ERR, "EH pending after %d "
- "tries, giving up\n", ATA_EH_MAX_REPEAT);
+ "tries, giving up\n", ATA_EH_MAX_TRIES);
ap->pflags &= ~ATA_PFLAG_EH_PENDING;
}
@@ -1778,6 +1778,7 @@ static void ata_eh_link_report(struct at
struct ata_port *ap = link->ap;
struct ata_eh_context *ehc = &link->eh_context;
const char *frozen, *desc;
+ char tries_buf[6];
int tag, nr_failed = 0;
desc = NULL;
@@ -1802,18 +1803,23 @@ static void ata_eh_link_report(struct at
if (ap->pflags & ATA_PFLAG_FROZEN)
frozen = " frozen";
+ memset(tries_buf, 0, sizeof(tries_buf));
+ if (ap->eh_tries < ATA_EH_MAX_TRIES)
+ snprintf(tries_buf, sizeof(tries_buf) - 1, " t%d",
+ ap->eh_tries);
+
if (ehc->i.dev) {
ata_dev_printk(ehc->i.dev, KERN_ERR, "exception Emask 0x%x "
- "SAct 0x%x SErr 0x%x action 0x%x%s\n",
- ehc->i.err_mask, link->sactive,
- ehc->i.serror, ehc->i.action, frozen);
+ "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
+ ehc->i.err_mask, link->sactive, ehc->i.serror,
+ ehc->i.action, frozen, tries_buf);
if (desc)
ata_dev_printk(ehc->i.dev, KERN_ERR, "%s\n", desc);
} else {
ata_link_printk(link, KERN_ERR, "exception Emask 0x%x "
- "SAct 0x%x SErr 0x%x action 0x%x%s\n",
- ehc->i.err_mask, link->sactive,
- ehc->i.serror, ehc->i.action, frozen);
+ "SAct 0x%x SErr 0x%x action 0x%x%s%s\n",
+ ehc->i.err_mask, link->sactive, ehc->i.serror,
+ ehc->i.action, frozen, tries_buf);
if (desc)
ata_link_printk(link, KERN_ERR, "%s\n", desc);
}
Index: work/include/linux/libata.h
===================================================================
--- work.orig/include/linux/libata.h
+++ work/include/linux/libata.h
@@ -293,8 +293,8 @@ enum {
ATA_EHI_DID_RESET = ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET,
ATA_EHI_RESET_MODIFIER_MASK = ATA_EHI_RESUME_LINK,
- /* max repeat if error condition is still set after ->error_handler */
- ATA_EH_MAX_REPEAT = 5,
+ /* max tries if error condition is still set after ->error_handler */
+ ATA_EH_MAX_TRIES = 5,
/* how hard are we gonna try to probe/recover devices */
ATA_PROBE_MAX_TRIES = 3,
@@ -580,6 +580,7 @@ struct ata_port {
u32 msg_enable;
struct list_head eh_done_q;
wait_queue_head_t eh_wait_q;
+ int eh_tries;
pm_message_t pm_mesg;
int *pm_result;
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libata-dev#upstream REGENERATED] libata: move EH repeat reporting into ata_eh_report()
2007-08-18 4:28 ` [PATCH libata-dev#upstream REGENERATED] " Tejun Heo
@ 2007-08-31 9:35 ` Jeff Garzik
0 siblings, 0 replies; 8+ messages in thread
From: Jeff Garzik @ 2007-08-31 9:35 UTC (permalink / raw)
To: Tejun Heo; +Cc: linux-ide, mikpe
Tejun Heo wrote:
> EH is sometimes repeated without any error or action. For example,
> this happens when probing IDENTIFY fails because of a phantom device.
> In these cases, all the repeated EH does is making sure there is no
> unhandled error or pending action and return. This repeation is
> necessary to avoid losing any event which occurred while EH was in
> progress.
>
> Unfortunately, this dry run causes annonying "EH pending after
> completion" message. This patch moves the repeat reporting into
> ata_eh_report() such that it's more compact and skipped on dry runs.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> Cc: Mikael Pettersson <mikep@it.uu.se>
> ---
> Regenerated against #upstream (41b135c7) +
> implement-and-use-ata_port_desc patch.
>
> drivers/ata/libata-eh.c | 30 ++++++++++++++++++------------
> include/linux/libata.h | 5 +++--
> 2 files changed, 21 insertions(+), 14 deletions(-)
applied
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-08-31 9:35 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-31 7:42 [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending Tejun Heo
2007-07-31 7:51 ` [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report() Tejun Heo
2007-08-15 8:52 ` Jeff Garzik
2007-08-18 4:28 ` [PATCH libata-dev#upstream REGENERATED] " Tejun Heo
2007-08-31 9:35 ` Jeff Garzik
2007-08-01 5:56 ` [PATCH libata-dev#upstream 1/2] libata: don't skip EH report if action is pending Tejun Heo
-- strict thread matches above, loose matches on Subject: below --
2007-07-31 21:27 [PATCH libata-dev#upstream 2/2] libata: move EH repeat reporting into ata_eh_report() Mikael Pettersson
2007-08-01 3:38 ` Tejun Heo
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).