diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2011-04-12 01:53:32 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-08 10:45:16 -0500 |
commit | 695d08fa94ce5bb8d9880e260445fbcf50fa41b4 (patch) | |
tree | dda7776d2ad2db3414a9377ae485c6e33575804d /drivers/block/drbd/drbd_main.c | |
parent | cd1d9950f69b46d88002b39652ed0cf3608d008b (diff) |
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_main.c')
-rw-r--r-- | drivers/block/drbd/drbd_main.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 563427bfc274..5abbdaf04663 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c | |||
@@ -453,8 +453,10 @@ void tl_clear(struct drbd_tconn *tconn) | |||
453 | } | 453 | } |
454 | 454 | ||
455 | /* ensure bit indicating barrier is required is clear */ | 455 | /* ensure bit indicating barrier is required is clear */ |
456 | rcu_read_lock(); | ||
456 | idr_for_each_entry(&tconn->volumes, mdev, vnr) | 457 | idr_for_each_entry(&tconn->volumes, mdev, vnr) |
457 | clear_bit(CREATE_BARRIER, &mdev->flags); | 458 | clear_bit(CREATE_BARRIER, &mdev->flags); |
459 | rcu_read_unlock(); | ||
458 | 460 | ||
459 | spin_unlock_irq(&tconn->req_lock); | 461 | spin_unlock_irq(&tconn->req_lock); |
460 | } | 462 | } |
@@ -634,13 +636,15 @@ char *drbd_task_to_thread_name(struct drbd_tconn *tconn, struct task_struct *tas | |||
634 | 636 | ||
635 | int conn_lowest_minor(struct drbd_tconn *tconn) | 637 | int conn_lowest_minor(struct drbd_tconn *tconn) |
636 | { | 638 | { |
637 | int vnr = 0; | ||
638 | struct drbd_conf *mdev; | 639 | struct drbd_conf *mdev; |
640 | int vnr = 0, m; | ||
639 | 641 | ||
642 | rcu_read_lock(); | ||
640 | mdev = idr_get_next(&tconn->volumes, &vnr); | 643 | mdev = idr_get_next(&tconn->volumes, &vnr); |
641 | if (!mdev) | 644 | m = mdev ? mdev_to_minor(mdev) : -1; |
642 | return -1; | 645 | rcu_read_unlock(); |
643 | return mdev_to_minor(mdev); | 646 | |
647 | return m; | ||
644 | } | 648 | } |
645 | 649 | ||
646 | #ifdef CONFIG_SMP | 650 | #ifdef CONFIG_SMP |