idr_alloc — allocate new idr entry
int idr_alloc ( | struct idr * idr, |
void * ptr, | |
int start, | |
int end, | |
gfp_t gfp_mask) ; |
idr
the (initialized) idr
ptr
pointer to be associated with the new id
start
the minimum id (inclusive)
end
the maximum id (exclusive, <= 0 for max)
gfp_mask
memory allocation flags
Allocate an id in [start, end) and associate it with ptr
. If no ID is
available in the specified range, returns -ENOSPC. On memory allocation
failure, returns -ENOMEM.
Note that end
is treated as max when <= 0. This is to always allow
using start
+ N as end
as long as N is inside integer range.
The user is responsible for exclusively synchronizing all operations
which may modify idr
. However, read-only accesses such as idr_find
or iteration can be performed under RCU read lock provided the user
destroys ptr
in RCU-safe way after removal from idr.