diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2011-04-11 22:53:32 -0700 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-08 16:45:16 +0100 |
commit | 695d08fa94ce5bb8d9880e260445fbcf50fa41b4 (patch) | |
tree | dda7776d2ad2db3414a9377ae485c6e33575804d /drivers/block/drbd/drbd_worker.c | |
parent | cd1d9950f69b46d88002b39652ed0cf3608d008b (diff) | |
download | op-kernel-dev-695d08fa94ce5bb8d9880e260445fbcf50fa41b4.zip op-kernel-dev-695d08fa94ce5bb8d9880e260445fbcf50fa41b4.tar.gz |
drbd: rcu_read_[un]lock() for all idr accesses that do not sleep
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_worker.c')
-rw-r--r-- | drivers/block/drbd/drbd_worker.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c index ef35bbd..410900e 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -1348,6 +1348,7 @@ static int _drbd_pause_after(struct drbd_conf *mdev) struct drbd_conf *odev; int i, rv = 0; + rcu_read_lock(); idr_for_each_entry(&minors, odev, i) { if (odev->state.conn == C_STANDALONE && odev->state.disk == D_DISKLESS) continue; @@ -1355,6 +1356,7 @@ static int _drbd_pause_after(struct drbd_conf *mdev) rv |= (__drbd_set_state(_NS(odev, aftr_isp, 1), CS_HARD, NULL) != SS_NOTHING_TO_DO); } + rcu_read_unlock(); return rv; } @@ -1370,6 +1372,7 @@ static int _drbd_resume_next(struct drbd_conf *mdev) struct drbd_conf *odev; int i, rv = 0; + rcu_read_lock(); idr_for_each_entry(&minors, odev, i) { if (odev->state.conn == C_STANDALONE && odev->state.disk == D_DISKLESS) continue; @@ -1380,6 +1383,7 @@ static int _drbd_resume_next(struct drbd_conf *mdev) != SS_NOTHING_TO_DO) ; } } + rcu_read_unlock(); return rv; } |