diff options
author | Bryn M. Reeves <bmr@redhat.com> | 2015-08-14 20:30:05 +0100 |
---|---|---|
committer | Bryn M. Reeves <bmr@redhat.com> | 2015-08-14 22:03:37 +0100 |
commit | 00ed52365916753d0bd6eb0de09c46ad782fec2e (patch) | |
tree | a770b92c3bc90351ae444a3bb3a2e57f13845fbd | |
parent | 77fae3d8522ffb1077dcb0e2e9ebfba86cf19daf (diff) | |
download | lvm2-00ed52365916753d0bd6eb0de09c46ad782fec2e.tar.gz |
libdm: add dm_stats_get_{current_}area_offset()
Add a method to retrieve the offset of an area within the
containing region (rather than the offset within the containing
device returned by dm_stats_get_area_start()).
Although users of the library can calculate this themselves it is
better to provide this through a method call to avoid users making
assumptions about the structure of regions and areas.
-rw-r--r-- | libdm/.exported_symbols.DM_1_02_105 | 2 | ||||
-rw-r--r-- | libdm/libdevmapper.h | 17 | ||||
-rw-r--r-- | libdm/libdm-stats.c | 15 |
3 files changed, 31 insertions, 3 deletions
diff --git a/libdm/.exported_symbols.DM_1_02_105 b/libdm/.exported_symbols.DM_1_02_105 index 9b701f147..4707164d9 100644 --- a/libdm/.exported_symbols.DM_1_02_105 +++ b/libdm/.exported_symbols.DM_1_02_105 @@ -1 +1,3 @@ dm_report_is_empty +dm_stats_get_area_offset +dm_stats_get_current_area_offset diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h index 303ed673c..bfc90daba 100644 --- a/libdm/libdevmapper.h +++ b/libdm/libdevmapper.h @@ -705,19 +705,27 @@ uint64_t dm_stats_get_region_area_len(const struct dm_stats *dms, uint64_t *area_len, uint64_t region_id); /* - * Area properties: start and length. + * Area properties: start, offset and length. * * The area length is always equal to the area length of the region * that contains it and is obtained from dm_stats_get_region_area_len(). * - * The start offset of an area is a function of the area_id and the - * containing region's start and area length. + * The start of an area is a function of the area_id and the containing + * region's start and area length: it gives the absolute offset into the + * containing device of the beginning of the area. + * + * The offset expresses the area's relative offset into the current + * region. I.e. the area start minus the start offset of the containing + * region. * * All values are returned in units of 512b sectors. */ uint64_t dm_stats_get_area_start(const struct dm_stats *dms, uint64_t *start, uint64_t region_id, uint64_t area_id); +uint64_t dm_stats_get_area_offset(const struct dm_stats *dms, uint64_t *offset, + uint64_t region_id, uint64_t area_id); + /* * Retrieve program_id and aux_data for a specific region. Only valid * following a call to dm_stats_list(). The returned pointer does not @@ -876,6 +884,9 @@ uint64_t dm_stats_get_current_region_area_len(const struct dm_stats *dms, uint64_t dm_stats_get_current_area_start(const struct dm_stats *dms, uint64_t *start); +uint64_t dm_stats_get_current_area_offset(const struct dm_stats *dms, + uint64_t *offset); + uint64_t dm_stats_get_current_area_len(const struct dm_stats *dms, uint64_t *start); diff --git a/libdm/libdm-stats.c b/libdm/libdm-stats.c index 51aba793e..400b12d1d 100644 --- a/libdm/libdm-stats.c +++ b/libdm/libdm-stats.c @@ -1335,6 +1335,14 @@ uint64_t dm_stats_get_area_start(const struct dm_stats *dms, uint64_t *start, return 1; } +uint64_t dm_stats_get_area_offset(const struct dm_stats *dms, uint64_t *offset, + uint64_t region_id, uint64_t area_id) +{ + if (!dms || !dms->regions) + return_0; + *offset = dms->regions[region_id].step * area_id; +} + uint64_t dm_stats_get_current_area_start(const struct dm_stats *dms, uint64_t *start) { @@ -1342,6 +1350,13 @@ uint64_t dm_stats_get_current_area_start(const struct dm_stats *dms, dms->cur_region, dms->cur_area); } +uint64_t dm_stats_get_current_area_offset(const struct dm_stats *dms, + uint64_t *offset) +{ + return dm_stats_get_area_offset(dms, offset, + dms->cur_region, dms->cur_area); +} + uint64_t dm_stats_get_current_area_len(const struct dm_stats *dms, uint64_t *len) { |