* [PATCH RFC] xfsprogs: consolidate filesystem info reporting
@ 2017-05-16 17:16 Eric Sandeen
0 siblings, 0 replies; only message in thread
From: Eric Sandeen @ 2017-05-16 17:16 UTC (permalink / raw)
To: linux-xfs
mkfs.xfs and xfs_growfs/xfs_info had /almost/ the same
output format, but not quite. Differences included
"internal" vs "internal log," "spinodes" vs. "sparse,"
commas in one and not the other, etc.
xfs_growfs uses report_info() to encapsulate this printing;
sharing with mkfs is a little awkward because growfs is using
an xfs_fsop_geom_t geo to query a mounted filesystem, whereas
mkfs has an xfs superblock for an unmounted filesystem, so some
translation is needed.
This patch makes a new libxcmd/util.c file for the report_info
function, and uses it for both mkfs and xfs_growfs with minor
tweaks on each side for consistency.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
I don't know if the console output for mkfs & growfs are considered
an informal API - if so, then this patch should just be ignored and
we'll have to live with the inconsistencies that are in the wild
already.
This is only lightly tested because I want to address the API aspect
of it before going off and writing tests, etc.
growfs/xfs_growfs.c | 52 ++--------------------------------------
include/libxcmd.h | 19 +++++++++++++-
libxcmd/Makefile | 2 -
libxcmd/util.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++
mkfs/xfs_mkfs.c | 50 ++++++++++++++++++++------------------
5 files changed, 115 insertions(+), 75 deletions(-)
diff --git a/growfs/xfs_growfs.c b/growfs/xfs_growfs.c
index a294e14..2ff33c1 100644
--- a/growfs/xfs_growfs.c
+++ b/growfs/xfs_growfs.c
@@ -17,6 +17,7 @@
*/
#include "libxfs.h"
+#include "libxcmd.h"
#include "path.h"
static void
@@ -42,53 +43,6 @@ Options:\n\
exit(2);
}
-void
-report_info(
- xfs_fsop_geom_t geo,
- char *mntpoint,
- int isint,
- char *logname,
- char *rtname,
- int lazycount,
- int dirversion,
- int logversion,
- int attrversion,
- int projid32bit,
- int crcs_enabled,
- int cimode,
- int ftype_enabled,
- int finobt_enabled,
- int spinodes,
- int rmapbt_enabled,
- int reflink_enabled)
-{
- printf(_(
- "meta-data=%-22s isize=%-6u agcount=%u, agsize=%u blks\n"
- " =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n"
- " =%-22s crc=%-8u finobt=%u spinodes=%u rmapbt=%u\n"
- " =%-22s reflink=%u\n"
- "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
- " =%-22s sunit=%-6u swidth=%u blks\n"
- "naming =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
- "log =%-22s bsize=%-6u blocks=%u, version=%u\n"
- " =%-22s sectsz=%-5u sunit=%u blks, lazy-count=%u\n"
- "realtime =%-22s extsz=%-6u blocks=%llu, rtextents=%llu\n"),
-
- mntpoint, geo.inodesize, geo.agcount, geo.agblocks,
- "", geo.sectsize, attrversion, projid32bit,
- "", crcs_enabled, finobt_enabled, spinodes, rmapbt_enabled,
- "", reflink_enabled,
- "", geo.blocksize, (unsigned long long)geo.datablocks,
- geo.imaxpct,
- "", geo.sunit, geo.swidth,
- dirversion, geo.dirblocksize, cimode, ftype_enabled,
- isint ? _("internal") : logname ? logname : _("external"),
- geo.blocksize, geo.logblocks, logversion,
- "", geo.logsectsize, geo.logsunit / geo.blocksize, lazycount,
- !geo.rtblocks ? _("none") : rtname ? rtname : _("external"),
- geo.rtextsize * geo.blocksize, (unsigned long long)geo.rtblocks,
- (unsigned long long)geo.rtextents);
-}
int
main(int argc, char **argv)
@@ -259,7 +213,7 @@ main(int argc, char **argv)
rmapbt_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_RMAPBT ? 1 : 0;
reflink_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_REFLINK ? 1 : 0;
if (nflag) {
- report_info(geo, datadev, isint, logdev, rtdev,
+ report_info(geo, datadev, logdev, rtdev,
lazycount, dirversion, logversion,
attrversion, projid32bit, crcs_enabled, ci,
ftype_enabled, finobt_enabled, spinodes,
@@ -298,7 +252,7 @@ main(int argc, char **argv)
exit(1);
}
- report_info(geo, datadev, isint, logdev, rtdev,
+ report_info(geo, datadev, logdev, rtdev,
lazycount, dirversion, logversion,
attrversion, projid32bit, crcs_enabled, ci, ftype_enabled,
finobt_enabled, spinodes, rmapbt_enabled,
diff --git a/include/libxcmd.h b/include/libxcmd.h
index e8d2ffc..5635e8e 100644
--- a/include/libxcmd.h
+++ b/include/libxcmd.h
@@ -51,6 +51,23 @@ extern int
check_overwrite(
const char *device);
-
+extern void
+report_info(
+ xfs_fsop_geom_t geo,
+ char *mntpoint,
+ char *logname,
+ char *rtname,
+ int lazycount,
+ int dirversion,
+ int logversion,
+ int attrversion,
+ int projid32bit,
+ int crcs_enabled,
+ int cimode,
+ int ftype_enabled,
+ int finobt_enabled,
+ int spinodes,
+ int rmapbt_enabled,
+ int reflink_enabled);
#endif /* __LIBXCMD_H__ */
diff --git a/libxcmd/Makefile b/libxcmd/Makefile
index aab8d6d..931dc7d 100644
--- a/libxcmd/Makefile
+++ b/libxcmd/Makefile
@@ -10,7 +10,7 @@ LT_CURRENT = 0
LT_REVISION = 0
LT_AGE = 0
-CFILES = command.c input.c paths.c projects.c help.c quit.c topology.c
+CFILES = command.c input.c paths.c projects.c help.c quit.c topology.c util.c
ifeq ($(HAVE_GETMNTENT),yes)
LCFLAGS += -DHAVE_GETMNTENT
diff --git a/libxcmd/util.c b/libxcmd/util.c
new file mode 100644
index 0000000..f9c3953
--- /dev/null
+++ b/libxcmd/util.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2000-2005 Silicon Graphics, Inc.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libxfs.h"
+
+void
+report_info(
+ xfs_fsop_geom_t geo,
+ char *mntpoint,
+ char *logname,
+ char *rtname,
+ int lazycount,
+ int dirversion,
+ int logversion,
+ int attrversion,
+ int projid32bit,
+ int crcs_enabled,
+ int cimode,
+ int ftype_enabled,
+ int finobt_enabled,
+ int spinodes,
+ int rmapbt_enabled,
+ int reflink_enabled)
+{
+ printf(_(
+ "meta-data=%-22s isize=%-6u agcount=%u, agsize=%u blks\n"
+ " =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n"
+ " =%-22s crc=%-8u finobt=%u, sparse=%u, rmapbt=%u\n"
+ " =%-22s reflink=%u\n"
+ "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
+ " =%-22s sunit=%-6u swidth=%u blks\n"
+ "naming =version %-14u bsize=%-6u ascii-ci=%d, ftype=%d\n"
+ "log =%-22s bsize=%-6u blocks=%u, version=%u\n"
+ " =%-22s sectsz=%-5u sunit=%u blks, lazy-count=%u\n"
+ "realtime =%-22s extsz=%-6u blocks=%llu, rtextents=%llu\n"),
+
+ mntpoint, geo.inodesize, geo.agcount, geo.agblocks,
+ "", geo.sectsize, attrversion, projid32bit,
+ "", crcs_enabled, finobt_enabled, spinodes, rmapbt_enabled,
+ "", reflink_enabled,
+ "", geo.blocksize, (unsigned long long)geo.datablocks,
+ geo.imaxpct,
+ "", geo.sunit, geo.swidth,
+ dirversion, geo.dirblocksize, cimode, ftype_enabled,
+ geo.logstart > 0 ? _("internal") : logname ?
+ logname : _("external"),
+ geo.blocksize, geo.logblocks, logversion,
+ "", geo.logsectsize, geo.logsunit / geo.blocksize, lazycount,
+ !geo.rtblocks ? _("none") : rtname ? rtname : _("external"),
+ geo.rtextsize * geo.blocksize, (unsigned long long)geo.rtblocks,
+ (unsigned long long)geo.rtextents);
+}
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 930f3d2..e11b4b4 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -2754,30 +2754,32 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
validate_log_size(logblocks, blocklog, min_logblocks);
if (!qflag || Nflag) {
- printf(_(
- "meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n"
- " =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n"
- " =%-22s crc=%-8u finobt=%u, sparse=%u, rmapbt=%u, reflink=%u\n"
- "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
- " =%-22s sunit=%-6u swidth=%u blks\n"
- "naming =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
- "log =%-22s bsize=%-6d blocks=%lld, version=%d\n"
- " =%-22s sectsz=%-5u sunit=%d blks, lazy-count=%d\n"
- "realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"),
- dfile, isize, (long long)agcount, (long long)agsize,
- "", sectorsize, sb_feat.attr_version,
- !sb_feat.projid16bit,
- "", sb_feat.crcs_enabled, sb_feat.finobt, sb_feat.spinodes,
- sb_feat.rmapbt, sb_feat.reflink,
- "", blocksize, (long long)dblocks, imaxpct,
- "", dsunit, dswidth,
- sb_feat.dir_version, dirblocksize, sb_feat.nci,
- sb_feat.dirftype,
- logfile, 1 << blocklog, (long long)logblocks,
- sb_feat.log_version, "", lsectorsize, lsunit,
- sb_feat.lazy_sb_counters,
- rtfile, rtextblocks << blocklog,
- (long long)rtblocks, (long long)rtextents);
+ xfs_fsop_geom_t geo;
+
+ geo.inodesize = isize;
+ geo.agcount = agcount;
+ geo.agblocks = agsize;
+ geo.sectsize = sectorsize;
+ geo.blocksize = blocksize;
+ geo.datablocks = dblocks;
+ geo.imaxpct = imaxpct;
+ geo.sunit = dsunit;
+ geo.swidth = dswidth;
+ geo.dirblocksize = dirblocksize;
+ geo.logstart = logstart;
+ geo.logblocks = logblocks;
+ geo.logsectsize = lsectorsize;
+ geo.logsunit = lsunit;
+ geo.rtblocks = rtblocks;
+ geo.rtextsize = rtextblocks;
+ geo.rtextents = rtextents;
+
+ report_info(geo, dfile, logfile, rtfile,
+ sb_feat.lazy_sb_counters, sb_feat.dir_version,
+ sb_feat.log_version, sb_feat.attr_version,
+ !sb_feat.projid16bit, sb_feat.crcs_enabled,
+ sb_feat.nci, sb_feat.dirftype, sb_feat.finobt,
+ sb_feat.spinodes, sb_feat.rmapbt, sb_feat.reflink);
if (Nflag)
exit(0);
}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2017-05-16 17:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-16 17:16 [PATCH RFC] xfsprogs: consolidate filesystem info reporting Eric Sandeen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).