Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=02c05a27e884c9655dae5b1c8bc0cd89c060c43d
Commit:     02c05a27e884c9655dae5b1c8bc0cd89c060c43d
Parent:     405e66b38797875e80669eaf72d313dbb76533c3
Author:     Tejun Heo <[EMAIL PROTECTED]>
AuthorDate: Tue Nov 27 19:28:54 2007 +0900
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Wed Jan 23 05:24:10 2008 -0500

    libata: factor out ata_eh_schedule_probe()
    
    Factor out ata_eh_schedule_probe() from ata_eh_handle_dev_fail() and
    ata_eh_recover().  This is to improve maintainability and make future
    changes easier.
    
    In the previous revision, ata_dev_enabled() test was accidentally
    dropped while factoring out.  This problem was spotted by Bartlomiej.
    
    Signed-off-by: Tejun Heo <[EMAIL PROTECTED]>
    Cc: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/ata/libata-eh.c |   38 +++++++++++++++++++++-----------------
 1 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 1d7faab..b16c81a 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2375,6 +2375,22 @@ static int ata_eh_skip_recovery(struct ata_link *link)
        return 1;
 }
 
+static int ata_eh_schedule_probe(struct ata_device *dev)
+{
+       struct ata_eh_context *ehc = &dev->link->eh_context;
+
+       if (!(ehc->i.probe_mask & (1 << dev->devno)) ||
+           (ehc->did_probe_mask & (1 << dev->devno)))
+               return 0;
+
+       ata_eh_detach_dev(dev);
+       ata_dev_init(dev);
+       ehc->did_probe_mask |= (1 << dev->devno);
+       ehc->i.action |= ATA_EH_SOFTRESET;
+
+       return 1;
+}
+
 static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
 {
        struct ata_eh_context *ehc = &dev->link->eh_context;
@@ -2406,16 +2422,9 @@ static int ata_eh_handle_dev_fail(struct ata_device 
*dev, int err)
                if (ata_link_offline(dev->link))
                        ata_eh_detach_dev(dev);
 
-               /* probe if requested */
-               if ((ehc->i.probe_mask & (1 << dev->devno)) &&
-                   !(ehc->did_probe_mask & (1 << dev->devno))) {
-                       ata_eh_detach_dev(dev);
-                       ata_dev_init(dev);
-
+               /* schedule probe if necessary */
+               if (ata_eh_schedule_probe(dev))
                        ehc->tries[dev->devno] = ATA_EH_DEV_TRIES;
-                       ehc->did_probe_mask |= (1 << dev->devno);
-                       ehc->i.action |= ATA_EH_SOFTRESET;
-               }
 
                return 1;
        } else {
@@ -2492,14 +2501,9 @@ int ata_eh_recover(struct ata_port *ap, 
ata_prereset_fn_t prereset,
                        if (dev->flags & ATA_DFLAG_DETACH)
                                ata_eh_detach_dev(dev);
 
-                       if (!ata_dev_enabled(dev) &&
-                           ((ehc->i.probe_mask & (1 << dev->devno)) &&
-                            !(ehc->did_probe_mask & (1 << dev->devno)))) {
-                               ata_eh_detach_dev(dev);
-                               ata_dev_init(dev);
-                               ehc->did_probe_mask |= (1 << dev->devno);
-                               ehc->i.action |= ATA_EH_SOFTRESET;
-                       }
+                       /* schedule probe if necessary */
+                       if (!ata_dev_enabled(dev))
+                               ata_eh_schedule_probe(dev);
                }
        }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to