diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2011-04-13 14:46:05 -0700 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-08 16:45:17 +0100 |
commit | d3fcb4908d8cce7f29cff16bbef3b08933148003 (patch) | |
tree | fc457ab337f19aa265a3b5cc4d5bcacc5b664315 /drivers/block/drbd/drbd_int.h | |
parent | ef356262846eb49821db7b20a131b6573e4c7d2e (diff) | |
download | lwn-d3fcb4908d8cce7f29cff16bbef3b08933148003.tar.gz lwn-d3fcb4908d8cce7f29cff16bbef3b08933148003.zip |
drbd: protect all idr accesses that might sleep with drbd_cfg_rwsem
With this commit the locking for all accesses to IDRs is complete:
* Non sleeping read accesses are protected by RCU
* sleeping read accesses are protocted by a read lock on drbd_cfg_rwsem
* accesses that add anything are protected by a write lock
* accesses that remove an object are protoected by a write lock
and a call to synchronize_rcu() after it is removed from the IDR
and before the object is actually free()ed.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_int.h')
-rw-r--r-- | drivers/block/drbd/drbd_int.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index 7896a648d4ad..2119d9b02eba 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -172,7 +172,7 @@ extern struct ratelimit_state drbd_ratelimit_state; extern struct idr minors; extern struct list_head drbd_tconns; extern struct rw_semaphore drbd_cfg_rwsem; -/* drbd_cfg_rwsem protects: drbd_tconns list, +/* drbd_cfg_rwsem protects: drbd_tconns list, minors idr, tconn->volumes idr note: non sleeping iterations over the idrs are protoected by RCU */ /* on the wire */ |