On Thu, 2024-04-11 at 11:55 +0200, Greg Kroah-Hartman wrote:
4.19-stable review patch. If anyone has any objections, please let me know.
From: Martijn Coenen maco@android.com
[ Upstream commit 083a6a50783ef54256eec3499e6575237e0e3d53 ]
sector_t is now always u64, so we don't need to check for truncation.
This needs to be reverted for 4.19, because sector_t wasn't always u64 until 5.2.
Ben.
Signed-off-by: Martijn Coenen maco@android.com Reviewed-by: Christoph Hellwig hch@lst.de Signed-off-by: Jens Axboe axboe@kernel.dk Signed-off-by: Genjian Zhang zhanggenjian@kylinos.cn Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
drivers/block/loop.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-)
--- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -225,24 +225,20 @@ static void __loop_update_dio(struct loo blk_mq_unfreeze_queue(lo->lo_queue); } -static int +static void figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit) { loff_t size = get_size(offset, sizelimit, lo->lo_backing_file);
- sector_t x = (sector_t)size; struct block_device *bdev = lo->lo_device;
- if (unlikely((loff_t)x != size))
if (lo->lo_offset != offset) lo->lo_offset = offset; if (lo->lo_sizelimit != sizelimit) lo->lo_sizelimit = sizelimit;return -EFBIG;
- set_capacity(lo->lo_disk, x);
- set_capacity(lo->lo_disk, size); bd_set_size(bdev, (loff_t)get_capacity(bdev->bd_disk) << 9); /* let user-space know about the new size */ kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
- return 0;
} static inline int @@ -972,10 +968,8 @@ static int loop_set_fd(struct loop_devic !file->f_op->write_iter) lo_flags |= LO_FLAGS_READ_ONLY;
- error = -EFBIG; size = get_loop_size(lo, file);
- if ((loff_t)(sector_t)size != size)
goto out_unlock;
- error = loop_prepare_queue(lo); if (error) goto out_unlock;
@@ -1280,10 +1274,7 @@ loop_set_status(struct loop_device *lo, lo->lo_device->bd_inode->i_mapping->nrpages); goto out_unfreeze; }
if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
err = -EFBIG;
goto out_unfreeze;
}
}figure_loop_size(lo, info->lo_offset, info->lo_sizelimit);
memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE); @@ -1486,7 +1477,9 @@ static int loop_set_capacity(struct loop if (unlikely(lo->lo_state != Lo_bound)) return -ENXIO;
- return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
- figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
- return 0;
} static int loop_set_dio(struct loop_device *lo, unsigned long arg)