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@xxxxxxxxxxx> > > [ 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@xxxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> > Signed-off-by: Genjian Zhang <zhanggenjian@xxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > --- > 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)) > - return -EFBIG; > if (lo->lo_offset != offset) > lo->lo_offset = offset; > if (lo->lo_sizelimit != sizelimit) > lo->lo_sizelimit = sizelimit; > - 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) > > > -- Ben Hutchings Everything should be made as simple as possible, but not simpler. - Albert Einstein
Attachment:
signature.asc
Description: This is a digitally signed message part