• T
    libata: beef up iterators · 1eca4365
    Tejun Heo 提交于
    There currently are the following looping constructs.
    
    * __ata_port_for_each_link() for all available links
    * ata_port_for_each_link() for edge links
    * ata_link_for_each_dev() for all devices
    * ata_link_for_each_dev_reverse() for all devices in reverse order
    
    Now there's a need for looping construct which is similar to
    __ata_port_for_each_link() but iterates over PMP links before the host
    link.  Instead of adding another one with long name, do the following
    cleanup.
    
    * Implement and export ata_link_next() and ata_dev_next() which take
      @mode parameter and can be used to build custom loop.
    * Implement ata_for_each_link() and ata_for_each_dev() which take
      looping mode explicitly.
    
    The following iteration modes are implemented.
    
    * ATA_LITER_EDGE		: loop over edge links
    * ATA_LITER_HOST_FIRST		: loop over all links, host link first
    * ATA_LITER_PMP_FIRST		: loop over all links, PMP links first
    
    * ATA_DITER_ENABLED		: loop over enabled devices
    * ATA_DITER_ENABLED_REVERSE	: loop over enabled devices in reverse order
    * ATA_DITER_ALL			: loop over all devices
    * ATA_DITER_ALL_REVERSE		: loop over all devices in reverse order
    
    This change removes exlicit device enabledness checks from many loops
    and makes it clear which ones are iterated over in which direction.
    Signed-off-by: NTejun Heo <tj@kernel.org>
    Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
    1eca4365
libata-eh.c 86.2 KB