idr: make idr_find rcu-safe
Make idr_find rcu-safe: it can now be called inside an rcu_read critical section. Signed-off-by: Nadia Derbey <Nadia.Derbey@bull.net> Reviewed-by: "Paul E. McKenney" <paulmck@us.ibm.com> Cc: Manfred Spraul <manfred@colorfullife.com> Cc: Jim Houston <jim.houston@comcast.net> Cc: Pierre Peiffer <peifferp@gmail.com> Acked-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
3219b3b745
commit
f9c46d6ea5
@@ -79,6 +79,22 @@ struct idr {
|
||||
|
||||
#define _idr_rc_to_errno(rc) ((rc) == -1 ? -EAGAIN : -ENOSPC)
|
||||
|
||||
/**
|
||||
* idr synchronization (stolen from radix-tree.h)
|
||||
*
|
||||
* idr_find() is able to be called locklessly, using RCU. The caller must
|
||||
* ensure calls to this function are made within rcu_read_lock() regions.
|
||||
* Other readers (lock-free or otherwise) and modifications may be running
|
||||
* concurrently.
|
||||
*
|
||||
* It is still required that the caller manage the synchronization and
|
||||
* lifetimes of the items. So if RCU lock-free lookups are used, typically
|
||||
* this would mean that the items have their own locks, or are amenable to
|
||||
* lock-free access; and that the items are freed by RCU (or only freed after
|
||||
* having been deleted from the idr tree *and* a synchronize_rcu() grace
|
||||
* period).
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is what we export.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user