From: George Spelvin <lkml@SDF.ORG>
To: Andreas Dilger <adilger@dilger.ca>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
"Theodore Ts'o" <tytso@mit.edu>,
linux-ext4 <linux-ext4@vger.kernel.org>,
lkml@sdf.org
Subject: Re: [RFC PATCH v1 08/50] fs/ext4/ialloc.c: Replace % with reciprocal_scale() TO BE VERIFIED
Date: Sun, 29 Mar 2020 04:00:12 +0000 [thread overview]
Message-ID: <20200329040012.GB11951@SDF.ORG> (raw)
In-Reply-To: <EC88E8EB-7303-45FB-85B9-A007FBE5F5A0@dilger.ca>
On Sat, Mar 28, 2020 at 06:10:11PM -0600, Andreas Dilger wrote:
> On Mar 28, 2020, at 5:15 PM, George Spelvin <lkml@SDF.ORG> wrote:
>> Also, we could, if desired, eliminate the i variable entirely
>> using the fact that we have a copy of the starting position cached
>> in parent_group. I.e.
>>
>> g = parent_group = reciprocal_scale(grp, ngroups);
>> - for (i = 0; i < ngroups; i++, ++g == ngroups && (g = 0)) {
>> + do {
>> ...
>> - }
>> + if (++g == ngroups)
>> + g = 0;
>> + } while (g != parent_group);
> I was looking at whether we could use a for-loop without "i"? Something like:
>
> for (g = parent_group + 1; g != parent_group; ++g >= ngroups && (g = 0))
>
> The initial group is parent_group + 1, to avoid special-casing when the
> initial parent_group = 0 (which would prevent the loop from terminating).
That's the first option I presented, above. Since a for() loop
tests before each iteration, if the counter is strictly modulo
ngroups, there's no way to execute the loop body more than ngroups-1
times.
That's why I changed to do{}while(), which has a minimum of 1 (it can't
handle ngroups == 0), but can mimic the current loop's execution
perfectly (no initial +1 offset).
prev parent reply other threads:[~2020-03-29 4:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-19 1:32 [RFC PATCH v1 08/50] fs/ext4/ialloc.c: Replace % with reciprocal_scale() TO BE VERIFIED George Spelvin
2020-03-28 22:56 ` Andreas Dilger
2020-03-28 23:15 ` George Spelvin
2020-03-29 0:10 ` Andreas Dilger
2020-03-29 4:00 ` George Spelvin [this message]
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=20200329040012.GB11951@SDF.ORG \
--to=lkml@sdf.org \
--cc=adilger@dilger.ca \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tytso@mit.edu \
/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.