Message ID | 20240529095206.2568162-3-yi.zhang@huaweicloud.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | iomap/xfs: fix stale data exposure when truncating realtime inodes | expand |
> +#ifndef rem_u64 > +static inline u32 rem_u64(u64 dividend, u32 divisor) > +{ > + if (is_power_of_2(divisor)) > + return dividend & (divisor - 1); > + return do_div(dividend, divisor); > +} > +#endif This ifndef seems superflous. Otherwise looks good: Reviewed-by: Christoph Hellwig <hch@lst.de>
On Wed, May 29, 2024 at 05:52:00PM +0800, Zhang Yi wrote: > From: Zhang Yi <yi.zhang@huawei.com> > > Add a new helper rem_u64() to only get the remainder of unsigned 64bit > divide with 32bit divisor. > > Signed-off-by: Zhang Yi <yi.zhang@huawei.com> Modulo hch's comments, Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > --- > include/linux/math64.h | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/include/linux/math64.h b/include/linux/math64.h > index d34def7f9a8c..618df4862091 100644 > --- a/include/linux/math64.h > +++ b/include/linux/math64.h > @@ -3,6 +3,7 @@ > #define _LINUX_MATH64_H > > #include <linux/types.h> > +#include <linux/log2.h> > #include <linux/math.h> > #include <asm/div64.h> > #include <vdso/math64.h> > @@ -12,6 +13,20 @@ > #define div64_long(x, y) div64_s64((x), (y)) > #define div64_ul(x, y) div64_u64((x), (y)) > > +/** > + * rem_u64 - remainder of unsigned 64bit divide with 32bit divisor > + * @dividend: unsigned 64bit dividend > + * @divisor: unsigned 32bit divisor > + * > + * Return: dividend % divisor > + */ > +static inline u32 rem_u64(u64 dividend, u32 divisor) > +{ > + if (is_power_of_2(divisor)) > + return dividend & (divisor - 1); > + return dividend % divisor; > +} > + > /** > * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder > * @dividend: unsigned 64bit dividend > @@ -86,6 +101,15 @@ static inline s64 div64_s64(s64 dividend, s64 divisor) > #define div64_long(x, y) div_s64((x), (y)) > #define div64_ul(x, y) div_u64((x), (y)) > > +#ifndef rem_u64 > +static inline u32 rem_u64(u64 dividend, u32 divisor) > +{ > + if (is_power_of_2(divisor)) > + return dividend & (divisor - 1); > + return do_div(dividend, divisor); > +} > +#endif > + > #ifndef div_u64_rem > static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) > { > -- > 2.39.2 > >
diff --git a/include/linux/math64.h b/include/linux/math64.h index d34def7f9a8c..618df4862091 100644 --- a/include/linux/math64.h +++ b/include/linux/math64.h @@ -3,6 +3,7 @@ #define _LINUX_MATH64_H #include <linux/types.h> +#include <linux/log2.h> #include <linux/math.h> #include <asm/div64.h> #include <vdso/math64.h> @@ -12,6 +13,20 @@ #define div64_long(x, y) div64_s64((x), (y)) #define div64_ul(x, y) div64_u64((x), (y)) +/** + * rem_u64 - remainder of unsigned 64bit divide with 32bit divisor + * @dividend: unsigned 64bit dividend + * @divisor: unsigned 32bit divisor + * + * Return: dividend % divisor + */ +static inline u32 rem_u64(u64 dividend, u32 divisor) +{ + if (is_power_of_2(divisor)) + return dividend & (divisor - 1); + return dividend % divisor; +} + /** * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder * @dividend: unsigned 64bit dividend @@ -86,6 +101,15 @@ static inline s64 div64_s64(s64 dividend, s64 divisor) #define div64_long(x, y) div_s64((x), (y)) #define div64_ul(x, y) div_u64((x), (y)) +#ifndef rem_u64 +static inline u32 rem_u64(u64 dividend, u32 divisor) +{ + if (is_power_of_2(divisor)) + return dividend & (divisor - 1); + return do_div(dividend, divisor); +} +#endif + #ifndef div_u64_rem static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) {