diff options
author | Manuel Bentele | 2019-08-21 14:21:41 +0200 |
---|---|---|
committer | Manuel Bentele | 2019-08-21 14:21:41 +0200 |
commit | bd06c2a34a5a41feaa273c50de0fb78e73176702 (patch) | |
tree | e3d197178f17b296020f396115e2f6394f2d568e /drivers/block/loop/loop_main.c | |
parent | block: loop: fix backward compatibility for loop_info structure (diff) | |
parent | Merge tag 'clk-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/... (diff) | |
download | kernel-qcow2-linux-bd06c2a34a5a41feaa273c50de0fb78e73176702.tar.gz kernel-qcow2-linux-bd06c2a34a5a41feaa273c50de0fb78e73176702.tar.xz kernel-qcow2-linux-bd06c2a34a5a41feaa273c50de0fb78e73176702.zip |
block: loop: merge remote-tracking branch 'linux-block/master'
Signed-off-by: Manuel Bentele <development@manuel-bentele.de>
Diffstat (limited to 'drivers/block/loop/loop_main.c')
-rw-r--r-- | drivers/block/loop/loop_main.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/block/loop/loop_main.c b/drivers/block/loop/loop_main.c index 726d4363b56f..b3d9577f45eb 100644 --- a/drivers/block/loop/loop_main.c +++ b/drivers/block/loop/loop_main.c @@ -243,7 +243,6 @@ figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit) lo->lo_offset = offset; if (lo->lo_sizelimit != sizelimit) lo->lo_sizelimit = sizelimit; - set_capacity(lo->lo_disk, x); bd_set_size(bdev, (loff_t)get_capacity(bdev->bd_disk) << 9); /* let user-space know about the new size */ @@ -590,7 +589,7 @@ static void loop_unprepare_queue(struct loop_device *lo) static int loop_kthread_worker_fn(void *worker_ptr) { - current->flags |= PF_LESS_THROTTLE; + current->flags |= PF_LESS_THROTTLE | PF_MEMALLOC_NOIO; return kthread_worker_fn(worker_ptr); } @@ -629,6 +628,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, struct file *file; struct inode *inode; struct address_space *mapping; + struct block_device *claimed_bdev = NULL; int lo_flags = 0; int error; loff_t size; @@ -647,10 +647,11 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, * here to avoid changing device under exclusive owner. */ if (!(mode & FMODE_EXCL)) { - bdgrab(bdev); - error = blkdev_get(bdev, mode | FMODE_EXCL, loop_set_fd); - if (error) + claimed_bdev = bd_start_claiming(bdev, loop_set_fd); + if (IS_ERR(claimed_bdev)) { + error = PTR_ERR(claimed_bdev); goto out_putf; + } } error = mutex_lock_killable(&loop_ctl_mutex); @@ -724,15 +725,15 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, mutex_unlock(&loop_ctl_mutex); if (partscan) loop_reread_partitions(lo, bdev); - if (!(mode & FMODE_EXCL)) - blkdev_put(bdev, mode | FMODE_EXCL); + if (claimed_bdev) + bd_abort_claiming(bdev, claimed_bdev, loop_set_fd); return 0; out_unlock: mutex_unlock(&loop_ctl_mutex); out_bdev: - if (!(mode & FMODE_EXCL)) - blkdev_put(bdev, mode | FMODE_EXCL); + if (claimed_bdev) + bd_abort_claiming(bdev, claimed_bdev, loop_set_fd); out_putf: fput(file); out: @@ -1536,7 +1537,6 @@ loop_info64_to_compat(const struct loop_info64 *info64, if (err) return -EFAULT; - return 0; } |