ida: Change ida_get_new_above to return the id
authorMatthew Wilcox <willy@infradead.org>
Mon, 18 Jun 2018 23:11:56 +0000 (19:11 -0400)
committerMatthew Wilcox <willy@infradead.org>
Wed, 22 Aug 2018 03:54:21 +0000 (23:54 -0400)
This calling convention makes more sense for the implementation as well
as the callers.  It even shaves 32 bytes off the compiled code size.

Signed-off-by: Matthew Wilcox <willy@infradead.org>
lib/idr.c

index 1dc52191acb6dc3781aac24e5fe4dd20f3c9d0a1..fab2fd5bc326bef8bdc9277485d9fe0d4ec50733 100644 (file)
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -363,7 +363,7 @@ EXPORT_SYMBOL(idr_replace);
 
 #define IDA_MAX (0x80000000U / IDA_BITMAP_BITS - 1)
 
-static int ida_get_new_above(struct ida *ida, int start, int *id)
+static int ida_get_new_above(struct ida *ida, int start)
 {
        struct radix_tree_root *root = &ida->ida_rt;
        void __rcu **slot;
@@ -402,8 +402,8 @@ static int ida_get_new_above(struct ida *ida, int start, int *id)
                        if (ebit < BITS_PER_LONG) {
                                tmp |= 1UL << ebit;
                                rcu_assign_pointer(*slot, (void *)tmp);
-                               *id = new + ebit - RADIX_TREE_EXCEPTIONAL_SHIFT;
-                               return 0;
+                               return new + ebit -
+                                       RADIX_TREE_EXCEPTIONAL_SHIFT;
                        }
                        bitmap = this_cpu_xchg(ida_bitmap, NULL);
                        if (!bitmap)
@@ -434,8 +434,7 @@ static int ida_get_new_above(struct ida *ida, int start, int *id)
                                                RADIX_TREE_EXCEPTIONAL_ENTRY);
                                radix_tree_iter_replace(root, &iter, slot,
                                                bitmap);
-                               *id = new;
-                               return 0;
+                               return new;
                        }
                        bitmap = this_cpu_xchg(ida_bitmap, NULL);
                        if (!bitmap)
@@ -444,8 +443,7 @@ static int ida_get_new_above(struct ida *ida, int start, int *id)
                        radix_tree_iter_replace(root, &iter, slot, bitmap);
                }
 
-               *id = new;
-               return 0;
+               return new;
        }
 }
 
@@ -534,7 +532,7 @@ EXPORT_SYMBOL(ida_destroy);
 int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,
                        gfp_t gfp)
 {
-       int ret, id = 0;
+       int id = 0;
        unsigned long flags;
 
        if ((int)min < 0)
@@ -545,24 +543,20 @@ int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max,
 
 again:
        xa_lock_irqsave(&ida->ida_rt, flags);
-       ret = ida_get_new_above(ida, min, &id);
-       if (!ret) {
-               if (id > max) {
-                       ida_remove(ida, id);
-                       ret = -ENOSPC;
-               } else {
-                       ret = id;
-               }
+       id = ida_get_new_above(ida, min);
+       if (id > (int)max) {
+               ida_remove(ida, id);
+               id = -ENOSPC;
        }
        xa_unlock_irqrestore(&ida->ida_rt, flags);
 
-       if (unlikely(ret == -EAGAIN)) {
+       if (unlikely(id == -EAGAIN)) {
                if (!ida_pre_get(ida, gfp))
                        return -ENOMEM;
                goto again;
        }
 
-       return ret;
+       return id;
 }
 EXPORT_SYMBOL(ida_alloc_range);