All of lore.kernel.org
 help / color / mirror / Atom feed
From: Elias Oltmanns <eo@nebensachen.de>
To: Tejun Heo <tj@kernel.org>
Cc: Jeff Garzik <jeff@garzik.org>,
	IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: [PATCH #upstream-fixes 2/4] libata: beef up iterators
Date: Sun, 26 Oct 2008 15:31:02 +0100	[thread overview]
Message-ID: <87tzaz77ix.fsf@denkblock.local> (raw)
In-Reply-To: 4904135B.4040901@kernel.org

Tejun Heo <tj@kernel.org> wrote:
> There currently are the following loop 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 loop 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: Tejun Heo <tj@kernel.org>
> ---
[...]
> Index: work/drivers/ata/libata-core.c
> ===================================================================
> --- work.orig/drivers/ata/libata-core.c
> +++ work/drivers/ata/libata-core.c
[...]
> @@ -1107,8 +1183,8 @@ static void ata_lpm_enable(struct ata_ho
>  
>  	for (i = 0; i < host->n_ports; i++) {
>  		ap = host->ports[i];
> -		ata_port_for_each_link(link, ap) {
> -			ata_link_for_each_dev(dev, link)
> +		ata_for_each_link(link, ap, EDGE) {
> +			ata_for_each_dev(dev, link, ALL)

Where did these short forms (EDGE, ALL) spring from? Does this code even
compile?

[...]
> Index: work/drivers/ata/libata-eh.c
> ===================================================================
> --- work.orig/drivers/ata/libata-eh.c
> +++ work/drivers/ata/libata-eh.c
[...]
> @@ -2880,9 +2871,8 @@ static int ata_link_nr_enabled(struct at
>  	struct ata_device *dev;
>  	int cnt = 0;
>  
> -	ata_link_for_each_dev(dev, link)
> -		if (ata_dev_enabled(dev))
> -			cnt++;
> +	ata_for_each_dev(dev, link, ENABLED)
> +		cnt++;
>  	return cnt;
>  }
>  
> @@ -2891,7 +2881,7 @@ static int ata_link_nr_vacant(struct ata
>  	struct ata_device *dev;
>  	int cnt = 0;
>  
> -	ata_link_for_each_dev(dev, link)
> +	ata_for_each_dev(dev, link, ALL)
>  		if (dev->class == ATA_DEV_UNKNOWN)
>  			cnt++;
>  	return cnt;

What about making the two above (ata_link_nr_*()) static inline while
you are at it? Or is this another one of those cases where the compiler
knows best anyway?

[...]
> Index: work/drivers/ata/libata-scsi.c
> ===================================================================
> --- work.orig/drivers/ata/libata-scsi.c
> +++ work/drivers/ata/libata-scsi.c
[...]
> @@ -3254,9 +3254,9 @@ void ata_scsi_scan_host(struct ata_port
>  	 * failure occurred, scan would have failed silently.  Check
>  	 * whether all devices are attached.
>  	 */
> -	ata_port_for_each_link(link, ap) {
> -		ata_link_for_each_dev(dev, link) {
> -			if (ata_dev_enabled(dev) && !dev->sdev)
> +	ata_for_each_link(link, ap, EDGE) {
> +		ata_for_each_dev(dev, link, ENABLED) {
> +			if (!dev->sdev)
>  				goto exit_loop;
>  		}
>  	}

Getting rid of those braces would make things even cleaner in my
opinion. (That's my nit picking since Sergei picked on that comment
formatting issue shortly before I was going to ;-) ).

Regards,

Elias

  parent reply	other threads:[~2008-10-26 14:31 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-26  6:50 [PATCH #upstream-fixes 1/4] libata: fix device iteration bugs Tejun Heo
2008-10-26  6:51 ` [PATCH #upstream-fixes 2/4] libata: beef up iterators Tejun Heo
2008-10-26  6:51   ` [PATCH #upstream-fixes 3/4] libata: when restoring SControl during detach do the PMP links first Tejun Heo
2008-10-26  6:52     ` [PATCH #upstream-fixes 4/4] libata: perform port detach in EH Tejun Heo
2008-10-28  4:02       ` Jeff Garzik
2008-10-26 14:31   ` Elias Oltmanns [this message]
2008-10-27  9:06     ` [PATCH #upstream-fixes 2/4] libata: beef up iterators Tejun Heo
2008-10-27  9:39       ` Elias Oltmanns
2008-10-27 10:17         ` Tejun Heo
2008-10-27 11:58           ` Elias Oltmanns
2008-10-28  4:01   ` Jeff Garzik
2008-10-30  1:25     ` Mark Lord
2008-10-30  1:58       ` Jeff Garzik
2008-10-26 10:47 ` [PATCH #upstream-fixes 1/4] libata: fix device iteration bugs Sergei Shtylyov
2008-10-27  9:07   ` Tejun Heo
2008-10-27 10:59     ` [PATCH #upstream-fixes 1/4 UPDATED] " Tejun Heo
2008-10-28  3:57       ` Jeff Garzik

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=87tzaz77ix.fsf@denkblock.local \
    --to=eo@nebensachen.de \
    --cc=jeff@garzik.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=tj@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.