summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2022-08-04 17:21:56 +0100
committerMark Brown <broonie@kernel.org>2022-08-04 17:21:56 +0100
commitdb499bb85eabb957ad7a1720e58a4e950425cf93 (patch)
tree104d560a9d8c1f280121ab22e6fb307f63a3fef6
parent6e2dc93c4dbbfbbfef597b47de9cd9c3da12db83 (diff)
parent69cb69ea55420388b444ee30b1530ec15ab584f7 (diff)
Merge branch 'main' of git://git.infradead.org/users/willy/xarray.git
-rw-r--r--lib/idr.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/lib/idr.c b/lib/idr.c
index 7ecdfdb5309e..aacb3e6d895d 100644
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -491,25 +491,22 @@ void ida_free(struct ida *ida, unsigned int id)
struct ida_bitmap *bitmap;
unsigned long flags;
- if ((int)id < 0)
- return;
-
xas_lock_irqsave(&xas, flags);
bitmap = xas_load(&xas);
if (xa_is_value(bitmap)) {
unsigned long v = xa_to_value(bitmap);
if (bit >= BITS_PER_XA_VALUE)
- goto err;
+ goto not_found;
if (!(v & (1UL << bit)))
- goto err;
+ goto not_found;
v &= ~(1UL << bit);
if (!v)
goto delete;
xas_store(&xas, xa_mk_value(v));
} else {
if (!test_bit(bit, bitmap->bitmap))
- goto err;
+ goto not_found;
__clear_bit(bit, bitmap->bitmap);
xas_set_mark(&xas, XA_FREE_MARK);
if (bitmap_empty(bitmap->bitmap, IDA_BITMAP_BITS)) {
@@ -518,11 +515,8 @@ delete:
xas_store(&xas, NULL);
}
}
+not_found:
xas_unlock_irqrestore(&xas, flags);
- return;
- err:
- xas_unlock_irqrestore(&xas, flags);
- WARN(1, "ida_free called for id=%d which is not allocated.\n", id);
}
EXPORT_SYMBOL(ida_free);