Bug 862095 - liblvm2app: property "data_percent" returns -1 for thin volumes
liblvm2app: property "data_percent" returns -1 for thin volumes
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: lvm2 (Show other bugs)
Unspecified Unspecified
medium Severity unspecified
: rc
: ---
Assigned To: Zdenek Kabelac
Cluster QE
Depends On:
  Show dependency treegraph
Reported: 2012-10-01 16:42 EDT by benscott
Modified: 2013-02-21 03:14 EST (History)
13 users (show)

See Also:
Fixed In Version: lvm2-2.02.98-1.el6
Doc Type: Bug Fix
Doc Text:
Unimplemented property "data_percent" for lvm2app caused return of incorrect value '-1' for thin volumes. It has been fixed by adding proper support for lvm_lv_get_property(lv, "data_percent");
Story Points: ---
Clone Of:
Last Closed: 2013-02-21 03:14:08 EST
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)
Patch to correctly return value of property "data_percent" (979 bytes, patch)
2012-10-03 12:49 EDT, Tony Asleson
no flags Details | Diff

  None (edit)
Description benscott 2012-10-01 16:42:30 EDT
Description of problem:

When using the following line of code:

   value = lvm_lv_get_property(lvmLV, "data_percent");

The value is the the same percentage reported by the "lvs" command for thin pools but returns invalid (-1) for thin volumes.

for example:

~# lvs
  LV        VG      Attr      LSize Pool     Data%  Move Log Copy%  Convert
  Pool_One  MyGroup twi-a-tz- 1.00g          9.96                        
  thin_vol2 MyGroup Vwi-a-tz- 2.00g Pool_One 4.98                        

for Pool_One  --> value = 9960937
for thin_vol2 --> value = -1

Version-Release number of selected component (if applicable):

  LVM version:     2.02.98(2)-git (2012-08-24)
  Library version: 1.02.77-git (2012-08-24)
  Driver version:  4.22.0

Additional info:

As reported in bug #838257 the number is reported with a uint64_t
but the percentage is an int32_t so sizes and signs are getting
mixed up.
Comment 2 Tony Asleson 2012-10-03 12:49:04 EDT
Created attachment 621019 [details]
Patch to correctly return value of property "data_percent"
Comment 3 Alasdair Kergon 2012-10-04 19:58:37 EDT
And what about the values when it's a snapshot, and various other conditions in the 'lvs' code.

Do we always want the output to match?  If so, we should find a better way to share the logic to arrive at the right number before going into the mechanics of outputting it either via liblvm or a cmdline report like lvs.

How many other fields similarly don't match?
Comment 4 Zdenek Kabelac 2012-10-05 04:41:14 EDT
Fixed upstream with slightly different patch to provide matching behavior with lvs reporting functionality (data_percent reports also snap_percent for old-snaps):

Comment 6 Zdenek Kabelac 2012-10-12 05:49:02 EDT
Here is simple    lvm2api test program which should pass now:

# Create pool & thin & snap LVs

lvcreate -L5M -T vg/pool
lvcreate -V1M -T vg/pool -n thin


#include "lvm2app.h"

int main(int argc, char *argv[])
	lvm_t handle;
	vg_t vg;
	lv_t lv;
	struct lvm_property_value v;

	handle = lvm_init(NULL);
	vg = lvm_vg_open(handle, argv[1], "r", 0);
	lv = lvm_lv_from_name(vg, "thin");
	v = lvm_lv_get_property(lv, "data_percent");


	return  (v.is_valid && v.value.integer != -1) ? 0 : 1;
Comment 9 errata-xmlrpc 2013-02-21 03:14:08 EST
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.


Note You need to log in before you can comment on or make changes to this bug.