On Wed, Jun 21, 2017 at 04:53:52PM -0500, Eric Sandeen wrote: > On 6/15/17 3:37 PM, Darrick J. Wong wrote: > > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > > > Add a -g switch to show only a per-group summary. > > > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > with a small fix (see below) > > Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > > > --- > > man/man8/xfs_spaceman.8 | 6 +++++- > > spaceman/freesp.c | 27 ++++++++++++++++++++++++--- > > 2 files changed, 29 insertions(+), 4 deletions(-) > > > > > > diff --git a/man/man8/xfs_spaceman.8 b/man/man8/xfs_spaceman.8 > > index f064360..0302196 100644 > > --- a/man/man8/xfs_spaceman.8 > > +++ b/man/man8/xfs_spaceman.8 > > @@ -25,7 +25,7 @@ then the program exits. > > > > .SH COMMANDS > > .TP > > -.BI "freesp [ \-drs ] [-a agno] [ \-b | \-e bsize | \-h bsize | \-m factor ]" > > +.BI "freesp [ \-dgrs ] [-a agno] [ \-b | \-e bsize | \-h bsize | \-m factor ]" > > With no arguments, > > .B freesp > > shows a histogram of all free space extents in the filesystem. > > @@ -49,6 +49,10 @@ This is the default, and is mutually exclusive with the > > Print debugging information such as the raw free space extent information. > > > > .TP > > +.B \-g > > +Print the free space block and extent counts for each AG. > > + > > +.TP > > .B \-e bsize > > Set all histogram bin sizes to a specific value. > > This option is mutually exclusive with the > > diff --git a/spaceman/freesp.c b/spaceman/freesp.c > > index 99e50cf..79eea44 100644 > > --- a/spaceman/freesp.c > > +++ b/spaceman/freesp.c > > @@ -43,6 +43,7 @@ static long long multsize; > > static int histcount; > > static int seen1; > > static int summaryflag; > > +static int gflag; > > static bool rtflag; > > static long long totblocks; > > static long long totexts; > > @@ -164,6 +165,8 @@ scan_ag( > > off64_t bperag; > > off64_t aglen; > > xfs_agblock_t agbno; > > + unsigned long long freeblks = 0; > > + unsigned long long freeexts = 0; > > int ret; > > int i; > > > > @@ -216,6 +219,8 @@ scan_ag( > > agbno = (extent->fmr_physical - (bperag * agno)) / > > blocksize; > > aglen = extent->fmr_length / blocksize; > > + freeblks += aglen; > > + freeexts++; > > > > addtohist(agno, agbno, aglen); > > } > > @@ -225,6 +230,15 @@ scan_ag( > > break; > > fsmap_advance(fsmap); > > } > > + > > + if (gflag) { > > + if (agno == NULLAGNUMBER) > > + printf(_(" rtdev %10llu %10llu\n"), freeexts, > > + freeblks); > > + else > > + printf(_("%10u %10llu %10llu\n"), agno, freeexts, > > + freeblks); > > + } > > } > > static void > > aglistadd( > > @@ -258,7 +272,7 @@ init( > > hist = NULL; > > rtflag = false; > > > > - while ((c = getopt(argc, argv, "a:bde:h:m:rs")) != EOF) { > > + while ((c = getopt(argc, argv, "a:bde:gh:m:rs")) != EOF) { > > switch (c) { > > case 'a': > > aglistadd(optarg); > > @@ -280,6 +294,10 @@ init( > > return command_usage(&freesp_cmd); > > speced = 1; > > break; > > + case 'g': > > + histcount = 0; > > + gflag++; > > + break; > > This global needs to be reset in init() or it sticks: > > (I can fix it on the way in) Ok, sounds good. Assuming it's a simple insertion of "gflag = 0" somewhere before the getopt while loop, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > > xfs_spaceman> freesp > from to extents blocks pct > 1 1 647503 647503 1.69 > 2 3 334189 790976 2.07 > 4 7 369499 2009667 5.26 > 8 15 116258 1233152 3.23 > 16 31 16648 370824 0.97 > 32 63 8817 387963 1.01 > 64 127 5474 487854 1.28 > 128 255 3483 631960 1.65 > 256 511 2613 956121 2.50 > 512 1023 1758 1249204 3.27 > 1024 2047 828 1151649 3.01 > 2048 4095 357 972144 2.54 > 4096 8191 122 687724 1.80 > 8192 16383 38 432634 1.13 > 16384 32767 23 566786 1.48 > 32768 65535 15 765430 2.00 > 65536 131071 14 1359754 3.56 > 131072 262143 4 653264 1.71 > 262144 524287 4 1775562 4.64 > 524288 1048575 2 1390287 3.64 > 1048576 2097151 2 2446908 6.40 > 2097152 4194303 2 6234130 16.31 > 4194304 8388607 2 11023746 28.84 > xfs_spaceman> freesp -g > AG extents blocks > 0 280589 6629403 > 1 289696 11847480 > 2 14299 7806587 > 3 923071 11941772 > xfs_spaceman> freesp > AG extents blocks > 0 280589 6629403 > 1 289696 11847480 > 2 14299 7806587 > 3 923071 11941772 > > > > case 'h': > > if (speced && !histcount) > > goto many_spec; > > @@ -331,13 +349,15 @@ freesp_f( > > > > if (!init(argc, argv)) > > return 0; > > + if (gflag) > > + printf(_(" AG extents blocks\n")); > > if (rtflag) > > scan_ag(NULLAGNUMBER); > > for (agno = 0; !rtflag && agno < file->geom.agcount; agno++) { > > if (inaglist(agno)) > > scan_ag(agno); > > } > > - if (histcount) > > + if (histcount && !gflag) > > printhist(); > > if (summaryflag) { > > printf(_("total free extents %lld\n"), totexts); > > @@ -363,6 +383,7 @@ freesp_help(void) > > " -b -- binary histogram bin size\n" > > " -d -- debug output\n" > > " -e bsize -- Use fixed histogram bin size of bsize\n" > > +" -g -- Print only a per-AG summary.\n" > > " -h hbsz -- Use custom histogram bin size of h1.\n" > > " Multiple specifications are allowed.\n" > > " -m bmult -- Use histogram bin size multiplier of bmult.\n" > > @@ -382,7 +403,7 @@ freesp_init(void) > > freesp_cmd.cfunc = freesp_f; > > freesp_cmd.argmin = 0; > > freesp_cmd.argmax = -1; > > - freesp_cmd.args = "[-drs] [-a agno]... [ -b | -e bsize | -h h1... | -m bmult ]"; > > + freesp_cmd.args = "[-dgrs] [-a agno]... [ -b | -e bsize | -h h1... | -m bmult ]"; > > freesp_cmd.flags = CMD_FLAG_ONESHOT; > > freesp_cmd.oneline = _("Examine filesystem free space"); > > freesp_cmd.help = freesp_help; > > > > -- > > 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 > > > -- > 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 -- 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