I noticed that the dm-thin metadata can be resized since LVM tools v2.02.99, and the related code in kernel had been added since 3.10, say,
maybe_resize_metadata_dev() in pool_resume in dm-thin.c.
I'm currently doing some experiments with dm-thin targets, with linux-3.11、LVM2.2.02.103
Here is my script to create thin-pool and thin-volumn on my device, a 200GB pool with 32M metadata
$ sudo vgcreate vg /dev/sda1
$ sudo lvcreate --type thin-pool --thinpool tpool vg --size 200G --poolmetadatasize 32M -c 1M
$ sudo lvcreate --name lv vg --virtualsize 100G --type thin --thinpool tpool
Then, I try to increase the metadata size with the following command,
$ sudo lvresize --poolmetadata +4M vg/tpool
Extending logical volume tp_tmeta to 36.00 MiB.
Logical volume tpool successfully resized
by executing "dmsetup status"/ "dmsetup table" command, the length of the *_tmeta volumn is successfully expended with 4MB size.
But when trying to resize the metadata lv to 64MB
$ sudo lvresize --poolmetadata +28M vg/tpool
Extending logical volume tpool_tmeta to 64.00 MiB.
device-mapper: resume ioctl on failed: No space left on device
Unable to resume vg-tpool-tpool (253:3)
Problem reactivating tpool
libdevmapper exiting with 2 device(s) still suspended.
I get error message in this step.
By executing vgs/lvs command, I still have free space in my volumn group and pool.
The dm table of *_tmeta device seems had been modified, but resumed fail.
The same kind of error also happens when I try to expend the metadata device with a big size, like 1GB.
After tracing the code, the -ENOSPC seems being returned from sm_bootstrap_new_block() in dm-space-map-metadata.c.
Here is my questions.
Did I miss some steps before resizing the metadata device?
Or, did the resizing of dm-thin metadata is limitted? If yes, what is the limitation?
Any help would be grateful. Thanks