On Sun, Apr 27, 2025 at 11:14:49PM +0800, Fedor Pchelkin wrote: > Deduplicate the same functionality implemented in several places by > moving the cmp_int() helper macro into linux/sort.h. > > The macro performs a three-way comparison of the arguments mostly useful > in different sorting strategies and algorithms. > > Suggested-by: Darrick J. Wong <djw...@kernel.org> > Signed-off-by: Fedor Pchelkin <pchel...@ispras.ru>
Acked-by: Coly Li <col...@kernel.org> Thanks. > --- > > https://lore.kernel.org/linux-xfs/20250426150359.GQ25675@frogsfrogsfrogs/T/#u > > drivers/md/bcache/btree.c | 3 +-- > fs/bcachefs/util.h | 3 +-- > fs/pipe.c | 3 +-- > fs/xfs/xfs_zone_gc.c | 2 -- > include/linux/sort.h | 10 ++++++++++ > 5 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c > index ed40d8600656..2cc2eb24dc8a 100644 > --- a/drivers/md/bcache/btree.c > +++ b/drivers/md/bcache/btree.c > @@ -36,6 +36,7 @@ > #include <linux/sched/clock.h> > #include <linux/rculist.h> > #include <linux/delay.h> > +#include <linux/sort.h> > #include <trace/events/bcache.h> > > /* > @@ -559,8 +560,6 @@ static void mca_data_alloc(struct btree *b, struct bkey > *k, gfp_t gfp) > } > } > > -#define cmp_int(l, r) ((l > r) - (l < r)) > - > #ifdef CONFIG_PROVE_LOCKING > static int btree_lock_cmp_fn(const struct lockdep_map *_a, > const struct lockdep_map *_b) > diff --git a/fs/bcachefs/util.h b/fs/bcachefs/util.h > index 3e52c7f8ddd2..7ec1fc8b46f9 100644 > --- a/fs/bcachefs/util.h > +++ b/fs/bcachefs/util.h > @@ -16,6 +16,7 @@ > #include <linux/preempt.h> > #include <linux/ratelimit.h> > #include <linux/slab.h> > +#include <linux/sort.h> > #include <linux/vmalloc.h> > #include <linux/workqueue.h> > > @@ -669,8 +670,6 @@ static inline void percpu_memset(void __percpu *p, int c, > size_t bytes) > > u64 *bch2_acc_percpu_u64s(u64 __percpu *, unsigned); > > -#define cmp_int(l, r) ((l > r) - (l < r)) > - > static inline int u8_cmp(u8 l, u8 r) > { > return cmp_int(l, r); > diff --git a/fs/pipe.c b/fs/pipe.c > index da45edd68c41..45077c37bad1 100644 > --- a/fs/pipe.c > +++ b/fs/pipe.c > @@ -26,6 +26,7 @@ > #include <linux/memcontrol.h> > #include <linux/watch_queue.h> > #include <linux/sysctl.h> > +#include <linux/sort.h> > > #include <linux/uaccess.h> > #include <asm/ioctls.h> > @@ -76,8 +77,6 @@ static unsigned long pipe_user_pages_soft = > PIPE_DEF_BUFFERS * INR_OPEN_CUR; > * -- Manfred Spraul <manf...@colorfullife.com> 2002-05-09 > */ > > -#define cmp_int(l, r) ((l > r) - (l < r)) > - > #ifdef CONFIG_PROVE_LOCKING > static int pipe_lock_cmp_fn(const struct lockdep_map *a, > const struct lockdep_map *b) > diff --git a/fs/xfs/xfs_zone_gc.c b/fs/xfs/xfs_zone_gc.c > index 81c94dd1d596..2f9caa3eb828 100644 > --- a/fs/xfs/xfs_zone_gc.c > +++ b/fs/xfs/xfs_zone_gc.c > @@ -290,8 +290,6 @@ xfs_zone_gc_query_cb( > return 0; > } > > -#define cmp_int(l, r) ((l > r) - (l < r)) > - > static int > xfs_zone_gc_rmap_rec_cmp( > const void *a, > diff --git a/include/linux/sort.h b/include/linux/sort.h > index 8e5603b10941..c01ef804a0eb 100644 > --- a/include/linux/sort.h > +++ b/include/linux/sort.h > @@ -4,6 +4,16 @@ > > #include <linux/types.h> > > +/** > + * cmp_int - perform a three-way comparison of the arguments > + * @l: the left argument > + * @r: the right argument > + * > + * Return: 1 if the left argument is greater than the right one; 0 if the > + * arguments are equal; -1 if the left argument is less than the right one. > + */ > +#define cmp_int(l, r) (((l) > (r)) - ((l) < (r))) > + > void sort_r(void *base, size_t num, size_t size, > cmp_r_func_t cmp_func, > swap_r_func_t swap_func, > -- > 2.49.0 > -- Coly Li