Re: rbd-nbd not resizing even after kernel tweaks

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

 



Great, thanks for the update.

Jason

On Fri, Apr 13, 2018 at 11:06 PM, Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx> wrote:
> On Thu, Apr 12, 2018 at 9:38 AM, Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx> wrote:
>> On Thu, Apr 12, 2018 at 7:57 AM, Jason Dillaman <jdillama@xxxxxxxxxx> wrote:
>>> If you run "partprobe" after you resize in your second example, is the
>>> change visible in "parted"?
>>
>> No, partprobe does not help:
>>
>> root@lumd1:~# parted /dev/nbd2 p
>> Model: Unknown (unknown)
>> Disk /dev/nbd2: 2147MB
>> Sector size (logical/physical): 512B/512B
>> Partition Table: loop
>> Disk Flags:
>>
>> Number  Start  End     Size    File system  Flags
>>  1      0.00B  2147MB  2147MB  xfs
>>
>> root@lumd1:~# partprobe
>> root@lumd1:~# parted /dev/nbd2 p
>> Model: Unknown (unknown)
>> Disk /dev/nbd2: 2147MB
>> Sector size (logical/physical): 512B/512B
>> Partition Table: loop
>> Disk Flags:
>>
>> Number  Start  End     Size    File system  Flags
>>  1      0.00B  2147MB  2147MB  xfs
>>
>>
>>
>>>
>>> On Wed, Apr 11, 2018 at 11:01 PM, Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx> wrote:
>>>> On Wed, Apr 11, 2018 at 2:13 PM, Jason Dillaman <jdillama@xxxxxxxxxx> wrote:
>>>>> I've tested the patch on both 4.14.0 and 4.16.0 and it appears to
>>>>> function correctly for me. parted can see the newly added free-space
>>>>> after resizing the RBD image and our stress tests once again pass
>>>>> successfully. Do you have any additional details on the issues you are
>>>>> seeing?
>>>>
>>>> I recompiled again with 4.14-24 and tested, the resize shows up OK
>>>> when the filesystem is not mounted.  dmesg shows also the "detected
>>>> capacity change" message.  However, if I create a filesystem and mount
>>>> it, the capacity change is no longer detected.  Steps as follows:
>>>>
>>>> root@lumd1:~# rbd create -s 1024 --image-format 2 matte/n4
>>>> root@lumd1:~# rbd-nbd map matte/n4
>>>> /dev/nbd2
>>>> root@lumd1:~# mkfs.xfs /dev/nbd2
>>>> meta-data=/dev/nbd2              isize=512    agcount=4, agsize=65536 blks
>>>>          =                       sectsz=512   attr=2, projid32bit=1
>>>>          =                       crc=1        finobt=1, sparse=0
>>>> data     =                       bsize=4096   blocks=262144, imaxpct=25
>>>>          =                       sunit=0      swidth=0 blks
>>>> naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
>>>> log      =internal log           bsize=4096   blocks=2560, version=2
>>>>          =                       sectsz=512   sunit=0 blks, lazy-count=1
>>>> realtime =none                   extsz=4096   blocks=0, rtextents=0
>>>> root@lumd1:~# parted /dev/nbd2 p
>>>> Model: Unknown (unknown)
>>>> Disk /dev/nbd2: 1074MB
>>>> Sector size (logical/physical): 512B/512B
>>>> Partition Table: loop
>>>> Disk Flags:
>>>>
>>>> Number  Start  End     Size    File system  Flags
>>>>  1      0.00B  1074MB  1074MB  xfs
>>>>
>>>> root@lumd1:~# rbd resize --pool matte --image n4 --size 2048
>>>> Resizing image: 100% complete...done.
>>>> root@lumd1:~# parted /dev/nbd2 p
>>>> Model: Unknown (unknown)
>>>> Disk /dev/nbd2: 2147MB
>>>> Sector size (logical/physical): 512B/512B
>>>> Partition Table: loop
>>>> Disk Flags:
>>>>
>>>> Number  Start  End     Size    File system  Flags
>>>>  1      0.00B  2147MB  2147MB  xfs
>>>>
>>>> -- All is well so far, now let's mount the fs
>>>>
>>>> root@lumd1:~# mount /dev/nbd2 /mnt
>>>> root@lumd1:~# rbd resize --pool matte --image n4 --size 3072
>>>> Resizing image: 100% complete...done.
>>>> root@lumd1:~# parted /dev/nbd2 p
>>>> Model: Unknown (unknown)
>>>> Disk /dev/nbd2: 2147MB
>>>> Sector size (logical/physical): 512B/512B
>>>> Partition Table: loop
>>>> Disk Flags:
>>>>
>>>> Number  Start  End     Size    File system  Flags
>>>>  1      0.00B  2147MB  2147MB  xfs
>>>>
>>>> -- Now the change is not detected
>>>>
>>>>
>>>>>
>>>>> On Wed, Apr 11, 2018 at 12:06 PM, Jason Dillaman <jdillama@xxxxxxxxxx> wrote:
>>>>>> I'll give it a try locally and see if I can figure it out. Note that
>>>>>> this commit [1] also dropped the call to "bd_set_size" within
>>>>>> "nbd_size_update", which seems suspicious to me at initial glance.
>>>>>>
>>>>>> [1] https://github.com/torvalds/linux/commit/29eaadc0364943b6352e8994158febcb699c9f9b#diff-bc9273bcb259fef182ae607a1d06a142L180
>>>>>>
>>>>>> On Wed, Apr 11, 2018 at 11:09 AM, Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx> wrote:
>>>>>>>> On Wed, Apr 11, 2018 at 10:27 AM, Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx> wrote:
>>>>>>>>> On Wed, Apr 11, 2018 at 2:43 AM, Mykola Golub <to.my.trociny@xxxxxxxxx> wrote:
>>>>>>>>>> On Tue, Apr 10, 2018 at 11:14:58PM -0400, Alex Gorbachev wrote:
>>>>>>>>>>
>>>>>>>>>>> So Josef fixed the one issue that enables e.g. lsblk and sysfs size to
>>>>>>>>>>> reflect the correct siz on change.  However, partptobe and parted
>>>>>>>>>>> still do not detect the change, complete unmap and remap of rbd-nbd
>>>>>>>>>>> device and remount of the filesystem is required.
>>>>>>>>>>
>>>>>>>>>> Does your rbd-nbd include this fix [1], targeted for v12.2.3?
>>>>>>>>>>
>>>>>>>>>> [1] http://tracker.ceph.com/issues/22172
>>>>>>>>>
>>>>>>>>> It should, the rbd-nbd version is 12.2.4
>>>>>>>>>
>>>>>>>>> root@lumd1:~# rbd-nbd -v
>>>>>>>>> ceph version 12.2.4 (52085d5249a80c5f5121a76d6288429f35e4e77b) luminous (stable)
>>>>>>>>> _______________________________________________
>>>>>>>
>>>>>>> On Wed, Apr 11, 2018 at 10:39 AM, Jason Dillaman <jdillama@xxxxxxxxxx> wrote:
>>>>>>>> Do you have a preliminary patch that we can test against?
>>>>>>>> Jason
>>>>>>>
>>>>>>> Hi Jason,
>>>>>>>
>>>>>>> This is the one Josef did, which fixes detection of the new size via
>>>>>>> sysfs (lsblk eetc.), but parted still requires complete unmapping and
>>>>>>> remapping of the NBD device to detect the change.
>>>>>>>
>>>>>>> I built a kernel with this patch based on 4.14.24, and also tested
>>>>>>> with the latest mainline 4.16.1 - same behavior.
>>>>>>>
>>>>>>> cc: stable@xxxxxxxxxxxxxxx
>>>>>>> Fixes: 639812a ("nbd: don't set the device size until we're connected")
>>>>>>> Signed-off-by: Josef Bacik <jbacik@xxxxxx>
>>>>>>> ---
>>>>>>>  drivers/block/nbd.c | 2 ++
>>>>>>>  1 file changed, 2 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
>>>>>>> index 86258b00a1d4..7106b98a35fb 100644
>>>>>>> --- a/drivers/block/nbd.c
>>>>>>> +++ b/drivers/block/nbd.c
>>>>>>> @@ -243,6 +243,8 @@ static void nbd_size_set(struct nbd_device *nbd,
>>>>>>> loff_t blocksize,
>>>>>>>         struct nbd_config *config = nbd->config;
>>>>>>>         config->blksize = blocksize;
>>>>>>>         config->bytesize = blocksize * nr_blocks;
>>>>>>> +       if (nbd->task_recv != NULL)
>>>>>>> +               nbd_size_update(nbd);
>>>>>>>  }
>>>>>>>
>>>>>>>  static void nbd_complete_rq(struct request *req)
>>>>>>>
>
>
> Josef submitted three patches to nbd.c today, which completely resolve
> the problem with the online resize of rbd-nbd device.  For
> convenience, I am listing them below:
>
> Fixes: c6a4759ea0c9 ("nbd: add device refcounting")
> cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Josef Bacik <jbacik@xxxxxx>
> Tested-by: Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/block/nbd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
> index 86258b00a1d4..e33da3e6aa20 100644
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@ -174,8 +174,8 @@ static void nbd_dev_remove(struct nbd_device *nbd)
>  {
>         struct gendisk *disk = nbd->disk;
>         if (disk) {
> -               del_gendisk(disk);
>                 blk_cleanup_queue(disk->queue);
> +               del_gendisk(disk);
>                 blk_mq_free_tag_set(&nbd->tag_set);
>                 disk->private_data = NULL;
>                 put_disk(disk);
>
> cc: stable@xxxxxxxxxxxxxxx
> Fixes: 639812a ("nbd: don't set the device size until we're connected")
> Signed-off-by: Josef Bacik <jbacik@xxxxxx>
> Tested-by: Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/block/nbd.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
> index e33da3e6aa20..1520383b12f6 100644
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@ -243,6 +243,8 @@ static void nbd_size_set(struct nbd_device *nbd,
> loff_t blocksize,
>         struct nbd_config *config = nbd->config;
>         config->blksize = blocksize;
>         config->bytesize = blocksize * nr_blocks;
> +       if (nbd->task_recv != NULL)
> +               nbd_size_update(nbd);
>  }
>
>  static void nbd_complete_rq(struct request *req)
>
> Fixes: 29eaadc ("nbd: stop using the bdev everywhere")
> cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Josef Bacik <jbacik@xxxxxx>
> Tested-by: Alex Gorbachev <ag@xxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/block/nbd.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
> index 1520383b12f6..61dd95aa47fa 100644
> --- a/drivers/block/nbd.c
> +++ b/drivers/block/nbd.c
> @@ -231,9 +231,15 @@ static void nbd_size_clear(struct nbd_device *nbd)
>  static void nbd_size_update(struct nbd_device *nbd)
>  {
>         struct nbd_config *config = nbd->config;
> +       struct block_device *bdev = bdget_disk(nbd->disk, 0);
> +
>         blk_queue_logical_block_size(nbd->disk->queue, config->blksize);
>         blk_queue_physical_block_size(nbd->disk->queue, config->blksize);
>         set_capacity(nbd->disk, config->bytesize >> 9);
> +       if (bdev) {
> +               bd_set_size(bdev, config->bytesize);
> +               bdput(bdev);
> +       }
>         kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE);
>  }
>
> @@ -1111,7 +1117,6 @@ static int nbd_start_device_ioctl(struct
> nbd_device *nbd, struct block_device *b
>         if (ret)
>                 return ret;
>
> -       bd_set_size(bdev, config->bytesize);
>         if (max_part)
>                 bdev->bd_invalidated = 1;
>         mutex_unlock(&nbd->config_lock);



-- 
Jason
_______________________________________________
ceph-users mailing list
ceph-users@xxxxxxxxxxxxxx
http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com



[Index of Archives]     [Information on CEPH]     [Linux Filesystem Development]     [Ceph Development]     [Ceph Large]     [Ceph Dev]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [xfs]


  Powered by Linux