[lustre-devel] [PATCH 22/37] lustre: lprocfs: use log2.h macros instead of shift loop.
NeilBrown
neilb at suse.com
Tue Feb 26 16:51:26 PST 2019
On Tue, Feb 26 2019, James Simmons wrote:
>> These shift loops seem to be trying to avoid doing a
>> multiplication.
>> We same effect can be achieved more transparently using
>> rounddown_pow_of_two(). Even though there is a multiplication
>> in the C code, the resulting machine code just does a single shift.
>
> Be aware rounddown_pow_of_two(n) is undefined when "n == 0".
Hmm... can os_bsize ever be less than 1024? I guess we still need to be
careful of the possibility.
The current code treats anything less than 1024 as though it were 1024,
so I could achieve the same thing with
result *= rounddown_pow_of_two(blk_size ?: 1);
Is that too obscure?
Thanks,
NeilBrown
>
>> Signed-off-by: NeilBrown <neilb at suse.com>
>> ---
>> .../lustre/lustre/obdclass/lprocfs_status.c | 10 +++-------
>> 1 file changed, 3 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
>> index a179b0d6979e..637aaca96888 100644
>> --- a/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
>> +++ b/drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
>> @@ -341,9 +341,7 @@ static ssize_t kbytestotal_show(struct kobject *kobj, struct attribute *attr,
>> u32 blk_size = osfs.os_bsize >> 10;
>> u64 result = osfs.os_blocks;
>>
>> - while (blk_size >>= 1)
>> - result <<= 1;
>> -
>> + result *= rounddown_pow_of_two(blk_size);
>> return sprintf(buf, "%llu\n", result);
>> }
>>
>> @@ -364,8 +362,7 @@ static ssize_t kbytesfree_show(struct kobject *kobj, struct attribute *attr,
>> u32 blk_size = osfs.os_bsize >> 10;
>> u64 result = osfs.os_bfree;
>>
>> - while (blk_size >>= 1)
>> - result <<= 1;
>> + result *= rounddown_pow_of_two(blk_size);
>>
>> return sprintf(buf, "%llu\n", result);
>> }
>> @@ -387,8 +384,7 @@ static ssize_t kbytesavail_show(struct kobject *kobj, struct attribute *attr,
>> u32 blk_size = osfs.os_bsize >> 10;
>> u64 result = osfs.os_bavail;
>>
>> - while (blk_size >>= 1)
>> - result <<= 1;
>> + result *= rounddown_pow_of_two(blk_size);
>>
>> return sprintf(buf, "%llu\n", result);
>> }
>>
>>
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20190227/3e106961/attachment-0001.sig>
More information about the lustre-devel
mailing list