From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Add an 'info' command to pretty-print the superblock geometry. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- db/Makefile | 2 + db/command.c | 1 + db/command.h | 1 + db/info.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ man/man8/xfs_db.8 | 6 ++++ 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 db/info.c diff --git a/db/Makefile b/db/Makefile index 6caa634..c73d7f2 100644 --- a/db/Makefile +++ b/db/Makefile @@ -14,7 +14,7 @@ HFILES = addr.h agf.h agfl.h agi.h attr.h attrshort.h bit.h block.h bmap.h \ io.h logformat.h malloc.h metadump.h output.h print.h quit.h sb.h \ sig.h strvec.h text.h type.h write.h attrset.h symlink.h fsmap.h \ fuzz.h -CFILES = $(HFILES:.h=.c) btdump.c +CFILES = $(HFILES:.h=.c) btdump.c info.c LSRCFILES = xfs_admin.sh xfs_ncheck.sh xfs_metadump.sh LLDLIBS = $(LIBXFS) $(LIBXLOG) $(LIBFROG) $(LIBUUID) $(LIBRT) $(LIBPTHREAD) diff --git a/db/command.c b/db/command.c index 12ae5b7..087955e 100644 --- a/db/command.c +++ b/db/command.c @@ -136,6 +136,7 @@ init_commands(void) fsmap_init(); help_init(); hash_init(); + info_init(); inode_init(); input_init(); logres_init(); diff --git a/db/command.h b/db/command.h index 9b4ed2d..84cd0b1 100644 --- a/db/command.h +++ b/db/command.h @@ -41,3 +41,4 @@ extern const cmdinfo_t *find_command(const char *cmd); extern void init_commands(void); extern void btdump_init(void); +extern void info_init(void); diff --git a/db/info.c b/db/info.c new file mode 100644 index 0000000..7e7e4db --- /dev/null +++ b/db/info.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2018 Oracle. All Rights Reserved. + * + * Author: Darrick J. Wong <darrick.wong@xxxxxxxxxx> + * + * 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; either version 2 + * of the License, or (at your option) any later version. + * + * 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" +#include "command.h" +#include "init.h" +#include "output.h" +#include "fsgeom.h" + +static void +info_help(void) +{ + dbprintf(_( +"\n" +" Pretty-prints the filesystem geometry as derived from the superblock.\n" +" The output has the same format as mkfs.\n" +"\n" +)); + +} + +static int +info_f( + int argc, + char **argv) +{ + struct xfs_fsop_geom geo; + int error; + + error = -libxfs_fs_geometry(&mp->m_sb, &geo, + XFS_FS_GEOM_MAX_STRUCT_VER); + if (error) { + dbprintf(_("could not obtain geometry\n")); + exitcode = 1; + return 0; + } + + xfs_report_geom(&geo, fsdevice, x.logname, x.rtname); + return 0; +} + +static const struct cmdinfo info_cmd = { + .name = "info", + .altname = "i", + .cfunc = info_f, + .argmin = 0, + .argmax = 0, + .canpush = 0, + .args = NULL, + .oneline = N_("dump superblock info"), + .help = info_help, +}; + +void +info_init(void) +{ + add_command(&info_cmd); +} diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8 index 524b1ef..e29821e 100644 --- a/man/man8/xfs_db.8 +++ b/man/man8/xfs_db.8 @@ -670,6 +670,12 @@ using the hash function of the XFS directory and attribute implementation. .BI "help [" command ] Print help for one or all commands. .TP +.B info +Displays selected geometry information about the filesystem. +The output will have the same format that +.BR "mkfs.xfs" "(8)" +prints when creating a filesystem. +.TP .BI "inode [" inode# ] Set the current inode number. If no .I inode# -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html