Skip to content

Commit

Permalink
idr: fix idr_pre_get() locking description
Browse files Browse the repository at this point in the history
Despite the idr_pre_get() kernel-doc, there are some cases where you can
call idr_pre_get() from within locked regions.  Add a description for such
cases.

See also: http://lkml.org/lkml/2010/9/16/462

[[email protected]: cleanups, grammatical fixes]
Signed-off-by: Naohiro Aota <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
naota authored and torvalds committed Oct 26, 2010
1 parent 66f1991 commit 066a9be
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions lib/idr.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,10 @@ static void idr_mark_full(struct idr_layer **pa, int id)
* @idp: idr handle
* @gfp_mask: memory allocation flags
*
* This function should be called prior to locking and calling the
* idr_get_new* functions. It preallocates enough memory to satisfy
* the worst possible allocation.
* This function should be called prior to calling the idr_get_new* functions.
* It preallocates enough memory to satisfy the worst possible allocation. The
* caller should pass in GFP_KERNEL if possible. This of course requires that
* no spinning locks be held.
*
* If the system is REALLY out of memory this function returns 0,
* otherwise 1.
Expand Down Expand Up @@ -290,9 +291,11 @@ static int idr_get_new_above_int(struct idr *idp, void *ptr, int starting_id)
* This is the allocate id function. It should be called with any
* required locks.
*
* If memory is required, it will return -EAGAIN, you should unlock
* and go back to the idr_pre_get() call. If the idr is full, it will
* return -ENOSPC.
* If allocation from IDR's private freelist fails, idr_get_new_above() will
* return -EAGAIN. The caller should retry the idr_pre_get() call to refill
* IDR's preallocation and then retry the idr_get_new_above() call.
*
* If the idr is full idr_get_new_above() will return -ENOSPC.
*
* @id returns a value in the range @starting_id ... 0x7fffffff
*/
Expand All @@ -318,12 +321,11 @@ EXPORT_SYMBOL(idr_get_new_above);
* @ptr: pointer you want associated with the id
* @id: pointer to the allocated handle
*
* This is the allocate id function. It should be called with any
* required locks.
* If allocation from IDR's private freelist fails, idr_get_new_above() will
* return -EAGAIN. The caller should retry the idr_pre_get() call to refill
* IDR's preallocation and then retry the idr_get_new_above() call.
*
* If memory is required, it will return -EAGAIN, you should unlock
* and go back to the idr_pre_get() call. If the idr is full, it will
* return -ENOSPC.
* If the idr is full idr_get_new_above() will return -ENOSPC.
*
* @id returns a value in the range 0 ... 0x7fffffff
*/
Expand Down

0 comments on commit 066a9be

Please sign in to comment.