]> sourceware.org Git - lvm2.git/commitdiff
Add pv_mda_size to 'pvs' and vg_mda_size to 'vgs'.
authorDave Wysochanski <dwysocha@redhat.com>
Fri, 9 Jan 2009 22:44:33 +0000 (22:44 +0000)
committerDave Wysochanski <dwysocha@redhat.com>
Fri, 9 Jan 2009 22:44:33 +0000 (22:44 +0000)
Reports the size of the smallest metadata area in a PV or a VG.
Useful to confirm pvcreate --metadatasize or pvmetadatasize setting in
/etc/lvm/lvm.conf file.

NOTE: Actual value in these fields will most always differ from that
given in pvcreate options due to rounding and alignment effects.

lib/format_text/format-text.c
lib/metadata/metadata.h
lib/report/columns.h
lib/report/report.c
man/pvs.8.in
man/vgs.8.in

index af9c2ac0e45ab08fc4911c48c15105be1f5498ff..428b5e25002fab42a1ca1b1f194ea61f19780adf 100644 (file)
@@ -87,6 +87,13 @@ static uint64_t _mda_free_sectors_raw(struct metadata_area *mda)
        return mdac->free_sectors;
 }
 
+static uint64_t _mda_total_sectors_raw(struct metadata_area *mda)
+{
+       struct mda_context *mdac = (struct mda_context *) mda->metadata_locn;
+
+       return mdac->area.size >> SECTOR_SHIFT;
+}
+
 /*
  * Check if metadata area belongs to vg
  */
@@ -1559,6 +1566,7 @@ static struct metadata_area_ops _metadata_text_raw_ops = {
        .vg_commit = _vg_commit_raw,
        .vg_revert = _vg_revert_raw,
        .mda_free_sectors = _mda_free_sectors_raw,
+       .mda_total_sectors = _mda_total_sectors_raw,
        .mda_in_vg = _mda_in_vg_raw,
        .pv_analyze_mda = _pv_analyze_mda_raw,
 };
index 9963c6df50872f2dd06a5ddf0889456205c81995..eb6ed451e32ce9321349b26fd1100fd50a40592a 100644 (file)
@@ -138,6 +138,11 @@ struct metadata_area_ops {
         */
        uint64_t (*mda_free_sectors) (struct metadata_area *mda);
 
+       /*
+        * Returns number of total sectors in given metadata area.
+        */
+       uint64_t (*mda_total_sectors) (struct metadata_area *mda);
+
        /*
         * Check if metadata area belongs to vg
         */
index 0310e754cae9dbd146c1fa35cf1530d7dcc8f48a..a8f380604d41cea09968dc3a104c5a9ae8bd15eb 100644 (file)
@@ -51,7 +51,8 @@ FIELD(PVS, pv, NUM, "PE", pe_count, 3, uint32, "pv_pe_count", "Total number of P
 FIELD(PVS, pv, NUM, "Alloc", pe_alloc_count, 5, uint32, "pv_pe_alloc_count", "Total number of allocated Physical Extents.")
 FIELD(PVS, pv, STR, "PV Tags", tags, 7, tags, "pv_tags", "Tags, if any.")
 FIELD(PVS, pv, NUM, "#PMda", id, 5, pvmdas, "pv_mda_count", "Number of metadata areas on this device.")
-FIELD(PVS, pv, NUM, "#PMdaFree", id, 9, pvmdafree, "pv_mda_free", "Free metadata area space on this device in current units.")
+FIELD(PVS, pv, NUM, "PMdaFree", id, 9, pvmdafree, "pv_mda_free", "Free metadata area space on this device in current units.")
+FIELD(PVS, pv, NUM, "PMdaSize", id, 9, pvmdasize, "pv_mda_size", "Size of smallest metadata area on this device in current units.")
 
 FIELD(VGS, vg, STR, "Fmt", cmd, 3, vgfmt, "vg_fmt", "Type of metadata.")
 FIELD(VGS, vg, STR, "VG UUID", id, 38, uuid, "vg_uuid", "Unique identifier.")
@@ -71,7 +72,8 @@ FIELD(VGS, vg, NUM, "#SN", snapshot_count, 3, uint32, "snap_count", "Number of s
 FIELD(VGS, vg, NUM, "Seq", seqno, 3, uint32, "vg_seqno", "Revision number of internal metadata.  Incremented whenever it changes.")
 FIELD(VGS, vg, STR, "VG Tags", tags, 7, tags, "vg_tags", "Tags, if any.")
 FIELD(VGS, vg, NUM, "#VMda", cmd, 5, vgmdas, "vg_mda_count", "Number of metadata areas in use by this VG.")
-FIELD(VGS, vg, NUM, "#VMdaFree", cmd, 9, vgmdafree, "vg_mda_free", "Free metadata area space for this VG in current units.")
+FIELD(VGS, vg, NUM, "VMdaFree", cmd, 9, vgmdafree, "vg_mda_free", "Free metadata area space for this VG in current units.")
+FIELD(VGS, vg, NUM, "VMdaSize", cmd, 9, vgmdasize, "vg_mda_size", "Size of smallest metadata area for this VG in current units.")
 
 FIELD(SEGS, seg, STR, "Type", list, 4, segtype, "segtype", "Type of LV segment")
 FIELD(SEGS, seg, NUM, "#Str", area_count, 4, uint32, "stripes", "Number of stripes or mirror legs.")
index a439c80f3dae59ef57f27c17923e9e380103c287..64b5f6b3f60539155b6acfdc64c225b5ea8104aa 100644 (file)
@@ -884,6 +884,53 @@ static int _pvmdafree_disp(struct dm_report *rh, struct dm_pool *mem,
        return _size64_disp(rh, mem, field, &freespace, private);
 }
 
+static uint64_t _find_min_mda_size(struct dm_list *mdas)
+{
+       uint64_t min_mda_size = UINT64_MAX, mda_size;
+       struct metadata_area *mda;
+
+       dm_list_iterate_items(mda, mdas) {
+               if (!mda->ops->mda_total_sectors)
+                       continue;
+               mda_size = mda->ops->mda_total_sectors(mda);
+               if (mda_size < min_mda_size)
+                       min_mda_size = mda_size;
+       }
+
+       if (min_mda_size == UINT64_MAX)
+               min_mda_size = UINT64_C(0);
+
+       return min_mda_size;
+}
+
+static int _pvmdasize_disp(struct dm_report *rh, struct dm_pool *mem,
+                          struct dm_report_field *field,
+                          const void *data, void *private)
+{
+       struct lvmcache_info *info;
+       uint64_t min_mda_size;
+       const char *pvid = (const char *)(&((struct id *) data)->uuid);
+
+       info = info_from_pvid(pvid, 0);
+
+       /* PVs could have 2 mdas of different sizes (rounding effect) */
+       min_mda_size = _find_min_mda_size(&info->mdas);
+
+       return _size64_disp(rh, mem, field, &min_mda_size, private);
+}
+
+static int _vgmdasize_disp(struct dm_report *rh, struct dm_pool *mem,
+                          struct dm_report_field *field,
+                          const void *data, void *private)
+{
+       const struct volume_group *vg = (const struct volume_group *) data;
+       uint64_t min_mda_size;
+
+       min_mda_size = _find_min_mda_size(&vg->fid->metadata_areas);
+
+       return _size64_disp(rh, mem, field, &min_mda_size, private);
+}
+
 static int _vgmdafree_disp(struct dm_report *rh, struct dm_pool *mem,
                           struct dm_report_field *field,
                           const void *data, void *private)
index 12ec414e10d92bcf0649e35104090134cb52841f..49810b688fd1e33873aa4130a4dec645285c7810 100644 (file)
@@ -31,7 +31,8 @@ if processing the output.
 Comma-separated ordered list of columns.  Precede the list with '+' to append
 to the default selection of columns.  Column names are: pv_fmt, pv_uuid,
 pv_size, dev_size, pv_free, pv_used, pv_name, pv_attr, pv_pe_count, 
-pv_pe_alloc_count, pv_tags, pvseg_start, pvseg_size, pe_start.
+pv_pe_alloc_count, pv_tags, pvseg_start, pvseg_size, pe_start,
+pv_mda_count, pv_mda_free, and pv_mda_size.
 With --segments, any "pvseg_" prefixes are optional; otherwise any
 "pv_" prefixes are optional.  Columns mentioned in \fBvgs (8)\fP can also
 be chosen. The pv_attr bits are: (a)llocatable and e(x)ported.
index 29e61e4bdd2140c321c8fce3afeff5074d01a095..0ae5c7b90557be014a65cc75f9c922324e49c712 100644 (file)
@@ -33,7 +33,7 @@ Comma-separated ordered list of columns.  Precede the list with '+' to append
 to the default selection of columns.  Column names are: vg_fmt, vg_uuid,
 vg_name, vg_attr, vg_size, vg_free, vg_sysid, vg_extent_size, vg_extent_count,
 vg_free_count, max_lv, max_pv, pv_count, lv_count, snap_count, vg_seqno,
-vg_tags.
+vg_tags, vg_mda_count, vg_mda_free, and vg_mda_size.
 Any "vg_" prefixes are optional.  Columns mentioned in either \fBpvs (8)\fP 
 or \fBlvs (8)\fP can also be chosen, but columns cannot be taken from both
 at the same time.  
This page took 0.049056 seconds and 5 git commands to generate.