diff options
-rw-r--r-- | drivers/block/ublk_drv.c | 6 |
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); |