Module Name: src Committed By: christos Date: Sun Oct 27 18:35:52 UTC 2024
Modified Files: src/usr.sbin/makefs: makefs.8 makefs.c makefs.h Log Message: Document debugging options and allow specifying them by name. To generate a diff of this commit: cvs rdiff -u -r1.72 -r1.73 src/usr.sbin/makefs/makefs.8 cvs rdiff -u -r1.58 -r1.59 src/usr.sbin/makefs/makefs.c cvs rdiff -u -r1.42 -r1.43 src/usr.sbin/makefs/makefs.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/makefs/makefs.8 diff -u src/usr.sbin/makefs/makefs.8:1.72 src/usr.sbin/makefs/makefs.8:1.73 --- src/usr.sbin/makefs/makefs.8:1.72 Wed May 8 11:57:56 2024 +++ src/usr.sbin/makefs/makefs.8 Sun Oct 27 14:35:52 2024 @@ -1,4 +1,4 @@ -.\" $NetBSD: makefs.8,v 1.72 2024/05/08 15:57:56 christos Exp $ +.\" $NetBSD: makefs.8,v 1.73 2024/10/27 18:35:52 christos Exp $ .\" .\" Copyright (c) 2001-2003 Wasabi Systems, Inc. .\" All rights reserved. @@ -33,7 +33,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd May 8, 2024 +.Dd October 27, 2024 .Dt MAKEFS 8 .Os .Sh NAME @@ -102,11 +102,71 @@ An optional suffix may be provided to indicate that .Ar free-blocks indicates a percentage of the calculated image size. -.It Fl d Ar debug-mask +.It Fl d Ar debug-mask | comma-separated-debug-option Enable various levels of debugging, depending upon which bits are set in .Ar debug-mask . -XXX: document these +The mask can also be set by specifying a comma separated list of debugging +options. +These are: +.Bl -tag -width X -offset indent -compact +.It Ar debug_time +Print the time it takes to perform each step. +.It Ar debug_walk_dir +Print each directory as it gets processed. +.It Ar debug_walk_dir_node +Print each file as it gets processed. +.It Ar debug_walk_dir_linkcheck +Print file information for files that have a link count > 1. +.It Ar debug_dump_fsnodes +Dump information about the filesystem nodes. +.It Ar debug_dump_fsnodes_verbose +Enable more detail if +.Dv debug_dump_fsnodes +is enabled. +.It Ar debug_fs_parse_opts +Print debugging information about specific filesystem option parsing. +.It Ar debug_fs_makefs +Print nodes as they are created and enable buffer consistency checks. +.It Ar debug_fs_validate +Enable file-system specific validation (ffs only). +.It Ar debug_fs_create_image +Print image file creation stats (ffs only). +.It Ar debug_fs_size_dir +Print directory size information (ffs only). +.It Ar debug_fs_size_dir_node +Print directory size information per node (ffs only). +.It Ar debug_fs_size_dir_add_dirent +Print directory size information as entries are added (ffs only). +.It Ar debug_fs_populate +Print information at each directory population pass (ffs only). +.It Ar debug_fs_populate_dirbuf +Dump the directory buffer (ffs only). +.It Ar debug_fs_populate_node +Print information about each file during directory population (ffs only). +.It Ar debug_fs_write_file +Print buffer informaion when writing files (ffs only). +.It Ar debug_fs_write_file_block +Print block information when writing files (ffs only). +.It Ar debug_fs_make_dirbuf +Print directory buffer information (ffs only). +.It Ar debug_fs_write_inode +Print inode information (ffs only). +.It Ar debug_buf_bread +Print block buffer information (ffs only). +.It Ar debug_buf_bwrite +Print block write information (ffs only). +.It Ar debug_buf_getblk +Print block allocaion information (ffs only). +.It Ar debug_apply_specfile +Print information about each directory in the specfile. +.It Ar debug_apply_specentry +Print information about each entry in the specfile. +.It Ar debug_apply_speconly +Debug the +.Fl x +special file exclusion. +.El .It Fl F Ar mtree-specfile Use .Ar mtree-specfile Index: src/usr.sbin/makefs/makefs.c diff -u src/usr.sbin/makefs/makefs.c:1.58 src/usr.sbin/makefs/makefs.c:1.59 --- src/usr.sbin/makefs/makefs.c:1.58 Wed May 8 11:57:56 2024 +++ src/usr.sbin/makefs/makefs.c Sun Oct 27 14:35:52 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: makefs.c,v 1.58 2024/05/08 15:57:56 christos Exp $ */ +/* $NetBSD: makefs.c,v 1.59 2024/10/27 18:35:52 christos Exp $ */ /* * Copyright (c) 2001-2003 Wasabi Systems, Inc. @@ -41,7 +41,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(__lint) -__RCSID("$NetBSD: makefs.c,v 1.58 2024/05/08 15:57:56 christos Exp $"); +__RCSID("$NetBSD: makefs.c,v 1.59 2024/10/27 18:35:52 christos Exp $"); #endif /* !__lint */ #include <assert.h> @@ -89,9 +89,10 @@ u_int debug; struct timespec start_time; struct stat stampst; -static fstype_t *get_fstype(const char *); +static fstype_t *get_fstype(const char *); static int get_tstamp(const char *, struct stat *); -static void usage(fstype_t *, fsinfo_t *) __dead; +static void usage(fstype_t *, fsinfo_t *) __dead; +static u_int parse_debug(char *); int main(int argc, char *argv[]) @@ -168,7 +169,7 @@ main(int argc, char *argv[]) break; case 'd': - debug = (int)strtoll(optarg, NULL, 0); + debug = parse_debug(optarg); break; case 'f': @@ -500,6 +501,13 @@ get_tstamp(const char *b, struct stat *s return 0; } +static struct { + const char *n; + u_int v; +} nv[] = { + DEBUG_STRINGS +}; + static void usage(fstype_t *fstype, fsinfo_t *fsoptions) { @@ -507,13 +515,17 @@ usage(fstype_t *fstype, fsinfo_t *fsopti prog = getprogname(); fprintf(stderr, -"Usage: %s [-rxZ] [-B endian] [-b free-blocks] [-d debug-mask]\n" +"Usage: %s [-rxZ] [-B endian] [-b free-blocks] [-d debug-mask|comma-separated-option]\n" "\t[-F mtree-specfile] [-f free-files] [-M minimum-size] [-m maximum-size]\n" "\t[-N userdb-dir] [-O offset] [-o fs-options] [-S sector-size]\n" "\t[-s image-size] [-T <timestamp/file>] [-t fs-type]" " image-file directory [extra-directory ...]\n", prog); + fprintf(stderr, "\nDebugging options:\n"); + for (size_t i = 0; i < __arraycount(nv); i++) + fprintf(stderr, "\t0x%8.8x\t%s\n", nv[i].v, nv[i].n); + if (fstype) { size_t i; option_t *o = fsoptions->fs_options; @@ -527,3 +539,29 @@ usage(fstype_t *fstype, fsinfo_t *fsopti } exit(EXIT_FAILURE); } + + +static u_int +parse_debug(char *str) +{ + char *ep; + u_int d; + size_t i; + + errno = 0; + d = (u_int)strtoul(str, &ep, 0); + if (str != ep && !*ep && errno == 0) + return d; + d = 0; + for (char *a = strtok(str, ","); a != NULL; a = strtok(NULL, ",")) { + for (i = 0; i < __arraycount(nv); i++) + if (strcmp(nv[i].n, a) == 0) { + d |= nv[i].v; + break; + } + if (i == __arraycount(nv)) + errx(EXIT_FAILURE, "Unknown debug option `%s'", a); + } + return d; +} + Index: src/usr.sbin/makefs/makefs.h diff -u src/usr.sbin/makefs/makefs.h:1.42 src/usr.sbin/makefs/makefs.h:1.43 --- src/usr.sbin/makefs/makefs.h:1.42 Mon Jun 17 16:22:20 2024 +++ src/usr.sbin/makefs/makefs.h Sun Oct 27 14:35:52 2024 @@ -240,6 +240,33 @@ extern struct stat stampst; #define DEBUG_APPLY_SPECENTRY 0x08000000 #define DEBUG_APPLY_SPECONLY 0x10000000 +#define DEBUG_STRINGS \ + { "time", DEBUG_TIME }, \ + { "walk_dir", DEBUG_WALK_DIR }, \ + { "walk_dir_node", DEBUG_WALK_DIR_NODE }, \ + { "walk_dir_linkcheck", DEBUG_WALK_DIR_LINKCHECK }, \ + { "dump_fsnodes", DEBUG_DUMP_FSNODES }, \ + { "dump_fsnodes_verbose", DEBUG_DUMP_FSNODES_VERBOSE }, \ + { "fs_parse_opts", DEBUG_FS_PARSE_OPTS }, \ + { "fs_makefs", DEBUG_FS_MAKEFS }, \ + { "fs_validate", DEBUG_FS_VALIDATE }, \ + { "fs_create_image", DEBUG_FS_CREATE_IMAGE }, \ + { "fs_size_dir", DEBUG_FS_SIZE_DIR }, \ + { "fs_size_dir_node", DEBUG_FS_SIZE_DIR_NODE }, \ + { "fs_size_dir_add_dirent", DEBUG_FS_SIZE_DIR_ADD_DIRENT }, \ + { "fs_populate", DEBUG_FS_POPULATE }, \ + { "fs_populate_dirbuf", DEBUG_FS_POPULATE_DIRBUF }, \ + { "fs_populate_node", DEBUG_FS_POPULATE_NODE }, \ + { "fs_write_file", DEBUG_FS_WRITE_FILE }, \ + { "fs_write_file_block", DEBUG_FS_WRITE_FILE_BLOCK }, \ + { "fs_make_dirbuf", DEBUG_FS_MAKE_DIRBUF }, \ + { "fs_write_inode", DEBUG_FS_WRITE_INODE }, \ + { "buf_bread", DEBUG_BUF_BREAD }, \ + { "buf_bwrite", DEBUG_BUF_BWRITE }, \ + { "buf_getblk", DEBUG_BUF_GETBLK }, \ + { "apply_specfile", DEBUG_APPLY_SPECFILE }, \ + { "apply_specentry", DEBUG_APPLY_SPECENTRY }, \ + { "apply_speconly", DEBUG_APPLY_SPECONLY }, #define TIMER_START(x) \ if (debug & DEBUG_TIME) \