Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e6ec9ea authored by Omar Sandoval's avatar Omar Sandoval Committed by Jens Axboe
Browse files

Revert "loop: support 4k physical blocksize"



There's some stuff still up in the air, let's not get stuck with a
subpar ABI. I'll follow up with something better for 4.14.

Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ea0ea2bc
Loading
Loading
Loading
Loading
+6 −36
Original line number Diff line number Diff line
@@ -221,8 +221,7 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
}

static int
figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit,
		 loff_t logical_blocksize)
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;
@@ -234,12 +233,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;
	if (lo->lo_flags & LO_FLAGS_BLOCKSIZE) {
		lo->lo_logical_blocksize = logical_blocksize;
		blk_queue_physical_block_size(lo->lo_queue, lo->lo_blocksize);
		blk_queue_logical_block_size(lo->lo_queue,
					     lo->lo_logical_blocksize);
	}
	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 */
@@ -820,7 +813,6 @@ static void loop_config_discard(struct loop_device *lo)
	struct file *file = lo->lo_backing_file;
	struct inode *inode = file->f_mapping->host;
	struct request_queue *q = lo->lo_queue;
	int lo_bits = 9;

	/*
	 * We use punch hole to reclaim the free space used by the
@@ -840,11 +832,9 @@ static void loop_config_discard(struct loop_device *lo)

	q->limits.discard_granularity = inode->i_sb->s_blocksize;
	q->limits.discard_alignment = 0;
	if (lo->lo_flags & LO_FLAGS_BLOCKSIZE)
		lo_bits = blksize_bits(lo->lo_logical_blocksize);

	blk_queue_max_discard_sectors(q, UINT_MAX >> lo_bits);
	blk_queue_max_write_zeroes_sectors(q, UINT_MAX >> lo_bits);
	blk_queue_max_discard_sectors(q, UINT_MAX >> 9);
	blk_queue_max_write_zeroes_sectors(q, UINT_MAX >> 9);
	queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, q);
}

@@ -938,7 +928,6 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,

	lo->use_dio = false;
	lo->lo_blocksize = lo_blocksize;
	lo->lo_logical_blocksize = 512;
	lo->lo_device = bdev;
	lo->lo_flags = lo_flags;
	lo->lo_backing_file = file;
@@ -1104,7 +1093,6 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
	int err;
	struct loop_func_table *xfer;
	kuid_t uid = current_uid();
	int lo_flags = lo->lo_flags;

	if (lo->lo_encrypt_key_size &&
	    !uid_eq(lo->lo_key_owner, uid) &&
@@ -1137,26 +1125,9 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
	if (err)
		goto exit;

	if (info->lo_flags & LO_FLAGS_BLOCKSIZE) {
		if (!(lo->lo_flags & LO_FLAGS_BLOCKSIZE))
			lo->lo_logical_blocksize = 512;
		lo->lo_flags |= LO_FLAGS_BLOCKSIZE;
		if (LO_INFO_BLOCKSIZE(info) != 512 &&
		    LO_INFO_BLOCKSIZE(info) != 1024 &&
		    LO_INFO_BLOCKSIZE(info) != 2048 &&
		    LO_INFO_BLOCKSIZE(info) != 4096)
			return -EINVAL;
		if (LO_INFO_BLOCKSIZE(info) > lo->lo_blocksize)
			return -EINVAL;
	}

	if (lo->lo_offset != info->lo_offset ||
	    lo->lo_sizelimit != info->lo_sizelimit ||
	    lo->lo_flags != lo_flags ||
	    ((lo->lo_flags & LO_FLAGS_BLOCKSIZE) &&
	     lo->lo_logical_blocksize != LO_INFO_BLOCKSIZE(info))) {
		if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit,
				     LO_INFO_BLOCKSIZE(info))) {
	    lo->lo_sizelimit != info->lo_sizelimit) {
		if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
			err = -EFBIG;
			goto exit;
		}
@@ -1348,8 +1319,7 @@ static int loop_set_capacity(struct loop_device *lo)
	if (unlikely(lo->lo_state != Lo_bound))
		return -ENXIO;

	return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit,
				lo->lo_logical_blocksize);
	return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
}

static int loop_set_dio(struct loop_device *lo, unsigned long arg)
+0 −1
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ struct loop_device {
	struct file *	lo_backing_file;
	struct block_device *lo_device;
	unsigned	lo_blocksize;
	unsigned	lo_logical_blocksize;
	void		*key_data; 

	gfp_t		old_gfp_mask;
+0 −3
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ enum {
	LO_FLAGS_AUTOCLEAR	= 4,
	LO_FLAGS_PARTSCAN	= 8,
	LO_FLAGS_DIRECT_IO	= 16,
	LO_FLAGS_BLOCKSIZE	= 32,
};

#include <asm/posix_types.h>	/* for __kernel_old_dev_t */
@@ -60,8 +59,6 @@ struct loop_info64 {
	__u64		   lo_init[2];
};

#define LO_INFO_BLOCKSIZE(l) (l)->lo_init[0]

/*
 * Loop filter types
 */