Re: [PATCH] loop: Set correct device size when using LOOP_CONFIGURE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Martijn

Look good to me. feel free to add  tested-by tag.
Also, I have sent a patch to ltp to test this. as below
https://patchwork.ozlabs.org/project/ltp/patch/1598415126-9703-1-git-send-email-xuyang2018.jy@xxxxxxxxxxxxxx/

Best Regards
Yang Xu

The device size calculation was done before processing the loop
configuration, which meant that the we set the size on the underlying
block device incorrectly in case lo_offset/lo_sizelimit were set in the
configuration. Delay computing the size until we've setup the device
parameters correctly.

Fixes: 3448914e8cc5("loop: Add LOOP_CONFIGURE ioctl")
Reported-by: Lennart Poettering <mzxreary@xxxxxxxxxxx>
Signed-off-by: Martijn Coenen <maco@xxxxxxxxxxx>
---
  drivers/block/loop.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 2f137d6ce169..fbda14840d8e 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1111,8 +1111,6 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  	mapping = file->f_mapping;
  	inode = mapping->host;
- size = get_loop_size(lo, file);
-
  	if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) {
  		error = -EINVAL;
  		goto out_unlock;
@@ -1162,6 +1160,8 @@ static int loop_configure(struct loop_device *lo, fmode_t mode,
  	loop_update_rotational(lo);
  	loop_update_dio(lo);
  	loop_sysfs_init(lo);
+
+	size = get_loop_size(lo, file);
  	loop_set_size(lo, size);
set_blocksize(bdev, S_ISBLK(inode->i_mode) ?






[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux