]> sourceware.org Git - lvm2.git/commit
libdm: fix dm_stats_delete_region() backwards compat
authorBryn M. Reeves <bmr@redhat.com>
Tue, 27 Sep 2016 16:46:52 +0000 (17:46 +0100)
committerBryn M. Reeves <bmr@redhat.com>
Tue, 27 Sep 2016 16:58:05 +0000 (17:58 +0100)
commit56c90ffa5e7d7c69c5230ac3bbee3ed03e7bae62
tree334df00699e15aeba61a10c1a6fd9fa87d25d958
parent6ec8854fdb051b092d5e262dc6c6d4c2ea075cd1
libdm: fix dm_stats_delete_region() backwards compat

The dm_stats_delete_region() call removes a region from the bound
device, and, if the region is grouped, from the group leader
group descriptor stored in aux_data.

To do this requires a listed handle: previous versions of the
library do not since no dependencies exist between regions without
grouping.

This leads to strange behaviour when a command built against an old
version of the library is used with one supporting groups. Deleting
a region with dmstats succeeds, but logs errors:

  # dmstats list
  Name             RgID RgSta RgSiz #Areas ArSize ProgID
  vg_hex-root         0     0 1.00g      1  1.00g dmstats
  vg_hex-root         1 1.00g 1.00g      1  1.00g dmstats
  vg_hex-root         2 2.00g 1.00g      1  1.00g dmstats
  # dmstats delete --regionid 2 vg_hex/root
  Region ID 2 does not exist
  Could not delete statistics region.
  Command failed
  # dmstats list
  Name             RgID RgSta RgSiz #Areas ArSize ProgID
  vg_hex-root         0     0 1.00g      1  1.00g dmstats
  vg_hex-root         1 1.00g 1.00g      1  1.00g dmstats

This happens because the call to dm_stats_delete_region() is inside
a dm_stats_walk_*() iterator: upon entry to the call, the iterator
is at its end conditions and about to terminate. Due to the call to
dm_stats_list() inside the function, it returns with an iterator at
the beginning of a walk and performs a further iteration before
exiting. This final loop makes a further attempt to delete the
(already deleted) region, leading to the confusing error messages.
WHATS_NEW_DM
libdm/libdm-stats.c
This page took 0.036223 seconds and 5 git commands to generate.