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
            !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;
                                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);
        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)