summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/block/ublk_drv.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index 81bfdda0f1af..f058f40b639c 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -131,6 +131,7 @@ struct ublk_device {
struct mutex mutex;
+ spinlock_t mm_lock;
struct mm_struct *mm;
struct completion completion;
@@ -678,12 +679,12 @@ static int ublk_ch_mmap(struct file *filp, struct vm_area_struct *vma)
unsigned long pfn, end, phys_off = vma->vm_pgoff << PAGE_SHIFT;
int q_id, ret = 0;
- mutex_lock(&ub->mutex);
+ spin_lock(&ub->mm_lock);
if (!ub->mm)
ub->mm = current->mm;
if (current->mm != ub->mm)
ret = -EINVAL;
- mutex_unlock(&ub->mutex);
+ spin_unlock(&ub->mm_lock);
if (ret)
return ret;
@@ -1122,6 +1123,7 @@ static int ublk_add_dev(struct ublk_device *ub)
ublk_align_max_io_size(ub);
mutex_init(&ub->mutex);
+ spin_lock_init(&ub->mm_lock);
/* add char dev so that ublksrv daemon can be setup */
return ublk_add_chdev(ub);