lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ