diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2023-02-28 11:25:05 +1100 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2023-02-28 11:25:05 +1100 |
commit | e480266ec7106bfa9be6bcac80edecc9953ce010 (patch) | |
tree | 9108ba39772d29f33dbccb1d50320e19493a4d68 | |
parent | 1c5b8d5a2fe1299b8e10f53750d340335c4f2813 (diff) | |
parent | 69cb69ea55420388b444ee30b1530ec15ab584f7 (diff) | |
download | linux-next-e480266ec7106bfa9be6bcac80edecc9953ce010.tar.gz |
Merge branch 'main' of git://git.infradead.org/users/willy/xarray.git
-rw-r--r-- | lib/idr.c | 14 |
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); |