aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2011-04-12 01:53:32 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2012-11-08 10:45:16 -0500
commit695d08fa94ce5bb8d9880e260445fbcf50fa41b4 (patch)
treedda7776d2ad2db3414a9377ae485c6e33575804d /drivers/block/drbd/drbd_main.c
parentcd1d9950f69b46d88002b39652ed0cf3608d008b (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.c12
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
635int conn_lowest_minor(struct drbd_tconn *tconn) 637int 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