idr_alloc — allocate new idr entry
| int idr_alloc ( | struct idr * idr, | 
| void * ptr, | |
| int start, | |
| int end, | |
| gfp_t gfp_mask ); | 
idrthe (initialized) idr
ptrpointer to be associated with the new id
startthe minimum id (inclusive)
endthe maximum id (exclusive, <= 0 for max)
gfp_maskmemory 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.