aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/drbd/drbd_main.c')
-rw-r--r--drivers/block/drbd/drbd_main.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index e2ab13d99d69..d2b6764a7b1f 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -2604,6 +2604,7 @@ static int drbd_open(struct block_device *bdev, fmode_t mode)
2604 unsigned long flags; 2604 unsigned long flags;
2605 int rv = 0; 2605 int rv = 0;
2606 2606
2607 lock_kernel();
2607 spin_lock_irqsave(&mdev->req_lock, flags); 2608 spin_lock_irqsave(&mdev->req_lock, flags);
2608 /* to have a stable mdev->state.role 2609 /* to have a stable mdev->state.role
2609 * and no race with updating open_cnt */ 2610 * and no race with updating open_cnt */
@@ -2618,6 +2619,7 @@ static int drbd_open(struct block_device *bdev, fmode_t mode)
2618 if (!rv) 2619 if (!rv)
2619 mdev->open_cnt++; 2620 mdev->open_cnt++;
2620 spin_unlock_irqrestore(&mdev->req_lock, flags); 2621 spin_unlock_irqrestore(&mdev->req_lock, flags);
2622 unlock_kernel();
2621 2623
2622 return rv; 2624 return rv;
2623} 2625}
@@ -2625,7 +2627,9 @@ static int drbd_open(struct block_device *bdev, fmode_t mode)
2625static int drbd_release(struct gendisk *gd, fmode_t mode) 2627static int drbd_release(struct gendisk *gd, fmode_t mode)
2626{ 2628{
2627 struct drbd_conf *mdev = gd->private_data; 2629 struct drbd_conf *mdev = gd->private_data;
2630 lock_kernel();
2628 mdev->open_cnt--; 2631 mdev->open_cnt--;
2632 unlock_kernel();
2629 return 0; 2633 return 0;
2630} 2634}
2631 2635