lkml.org 
[lkml]   [2020]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 2/9] loop: Factor out setting loop device size
    Date
    This code is used repeatedly.

    Signed-off-by: Martijn Coenen <maco@android.com>
    ---
    drivers/block/loop.c | 31 ++++++++++++++++++++++---------
    1 file changed, 22 insertions(+), 9 deletions(-)

    diff --git a/drivers/block/loop.c b/drivers/block/loop.c
    index f812f11649d3..4630d098cc54 100644
    --- a/drivers/block/loop.c
    +++ b/drivers/block/loop.c
    @@ -241,12 +241,29 @@ loop_validate_size(loff_t size)
    return 0;
    }

    +/**
    + * loop_set_size() - sets device size and notifies userspace
    + * @lo: struct loop_device to set the size for
    + * @size: new size of the loop device
    + *
    + * Callers must validate that the size passed into this function fits into
    + * a sector_t, eg using loop_validate_size()
    + */
    +static void loop_set_size(struct loop_device *lo, loff_t size)
    +{
    + struct block_device *bdev = lo->lo_device;
    +
    + set_capacity(lo->lo_disk, size);
    + bd_set_size(bdev, size << SECTOR_SHIFT);
    + /* let user-space know about the new size */
    + kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
    +}
    +
    static int
    figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit)
    {
    int err;
    loff_t size = get_size(offset, sizelimit, lo->lo_backing_file);
    - struct block_device *bdev = lo->lo_device;

    err = loop_validate_size(size);
    if (err)
    @@ -256,10 +273,9 @@ 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;
    - 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 */
    - kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
    +
    + loop_set_size(lo, size);
    +
    return 0;
    }

    @@ -1055,11 +1071,8 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,

    loop_update_rotational(lo);
    loop_update_dio(lo);
    - set_capacity(lo->lo_disk, size);
    - bd_set_size(bdev, size << 9);
    loop_sysfs_init(lo);
    - /* let user-space know about the new size */
    - kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
    + loop_set_size(lo, size);

    set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
    block_size(inode->i_bdev) : PAGE_SIZE);
    --
    2.26.2.303.gf8c07b1a785-goog
    \
     
     \ /
      Last update: 2020-04-27 09:42    [W:3.468 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site