[PATCH 2/4] staging: lustre: hash.c: replace IS_PO2 by is_power_of_2

Aya Mahfouz mahfouz.saif.elyazal at gmail.com
Sat Oct 17 10:34:14 UTC 2015


On Fri, Oct 16, 2015 at 10:40:25PM -0700, Greg KH wrote:
> On Sat, Oct 17, 2015 at 12:06:28AM +0200, Aya Mahfouz wrote:
> > Replaces IS_PO2 by is_power_of_2. IS_PO2 is used with several debug
> > macros. In this case, it is CDEBUG. Note that the replacement changes
> > the types involved, because the parameter of IS_PO2 is of type long long
> > and the return type is int, while the parameter of is_power_of_2 is of
> > type long and the return type is bool. This, however, has no impact,
> > because the actual argument is always of type int, and the return value
> > is always used as a boolean.
> > 
> > Signed-off-by: Aya Mahfouz <mahfouz.saif.elyazal at gmail.com>
> > ---
> >  drivers/staging/lustre/lustre/libcfs/hash.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/staging/lustre/lustre/libcfs/hash.c b/drivers/staging/lustre/lustre/libcfs/hash.c
> > index 6f4c7d4..4b5e79a 100644
> > --- a/drivers/staging/lustre/lustre/libcfs/hash.c
> > +++ b/drivers/staging/lustre/lustre/libcfs/hash.c
> > @@ -109,6 +109,8 @@
> >  
> >  #include "../../include/linux/libcfs/libcfs.h"
> >  #include <linux/seq_file.h>
> > +#include <linux/log2.h>
> > +
> >  
> >  #if CFS_HASH_DEBUG_LEVEL >= CFS_HASH_DEBUG_1
> >  static unsigned int warn_on_depth = 8;
> > @@ -1785,7 +1787,7 @@ cfs_hash_rehash_cancel_locked(struct cfs_hash *hs)
> >  	for (i = 2; cfs_hash_is_rehashing(hs); i++) {
> >  		cfs_hash_unlock(hs, 1);
> >  		/* raise console warning while waiting too long */
> > -		CDEBUG(IS_PO2(i >> 3) ? D_WARNING : D_INFO,
> > +		CDEBUG(is_power_of_2(i >> 3) ? D_WARNING : D_INFO,
> 
> is_power_of_2() works differently than IS_PO2(), are you _sure_ that the
> value here can not be 0?  If so, this will do something different :(
>

This is actually an interesting point to raise. __is_po2 the inline
function used by IS_PO2 should actually check if the number is greater
than 0. The current implementation of __is_po2 would allow the 
comparison of 0 with 2^(size of unsigned long long)-1. Is this correct?
Or is this something intentional?

> thanks,
> 
> greg k-h

-- 
Kind Regards,
Aya Saif El-yazal Mahfouz


More information about the devel mailing list