[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aL_PxUApMCyL-6K5@li-dc0c254c-257c-11b2-a85c-98b6c1322444.ibm.com>
Date: Tue, 9 Sep 2025 12:27:09 +0530
From: Ojaswin Mujoo <ojaswin@...ux.ibm.com>
To: John Garry <john.g.garry@...cle.com>
Cc: Zorro Lang <zlang@...hat.com>, fstests@...r.kernel.org,
Ritesh Harjani <ritesh.list@...il.com>, djwong@...nel.org,
tytso@....edu, linux-xfs@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-ext4@...r.kernel.org
Subject: Re: [PATCH v5 04/12] ltp/fsx.c: Add atomic writes support to fsx
On Mon, Sep 08, 2025 at 08:53:59AM +0100, John Garry wrote:
> On 05/09/2025 17:29, Ojaswin Mujoo wrote:
> > > > +
> > > > +/*
> > > > + * Round down n to nearest power of 2.
> > > > + * If n is already a power of 2, return n;
> > > > + */
> > > > +static int rounddown_pow_of_2(int n) {
> > > > + int i = 0;
> > > > +
> > > > + if (is_power_of_2(n))
> > > > + return n;
> > > > +
> > > > + for (; (1 << i) < n; i++);
> > > > +
> > > > + return 1 << (i - 1);
> > > Is this the neatest way to do this?
> > Well it is a straigforward o(logn) way. Do you have something else in
> > mind?
>
> check what the kernel does is always a good place to start...
>
> Thanks
So kernel pretty much does same thing:
unsigned long __rounddown_pow_of_two(unsigned long n)
{
return 1UL << (fls_long(n) - 1);
}
where fls*() variants jump into asm for efficiency. asm is obviously not
needed here so we use the for loop to calculate the fls (find last bit
set):
for (; (1 << i) < n; i++);
Ideally the compiler should do the right thing and optimize it.
Regards,
ojaswin
Powered by blists - more mailing lists