]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: add alignment filter to freesp command
authorEric Sandeen <sandeen@redhat.com>
Wed, 21 Jun 2017 19:40:35 +0000 (14:40 -0500)
committerEric Sandeen <sandeen@redhat.com>
Wed, 21 Jun 2017 19:40:35 +0000 (14:40 -0500)
This adds an alignment filter to the xfs_db freesp command, i.e.

xfs_db> freesp -A 4

will show only 4-block aligned free extents.

This can be useful for finding freespace suitable for allocations
with specific alignment requirements, such as inode allocation.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/freesp.c
man/man8/xfs_db.8

index 27e9f5a3ca4c9968544edecd2fad8951b0fa3c91..c3ca2f3ae20338261c774feed8520e21b8999a6e 100644 (file)
@@ -54,6 +54,7 @@ static int    usage(void);
 
 static int             agcount;
 static xfs_agnumber_t  *aglist;
+static int             alignment;
 static int             countflag;
 static int             dumpflag;
 static int             equalsize;
@@ -67,7 +68,7 @@ static long long      totexts;
 
 static const cmdinfo_t freesp_cmd =
        { "freesp", NULL, freesp_f, 0, -1, 0,
-         "[-bcdfs] [-a agno]... [-e binsize] [-h h1]... [-m binmult]",
+         "[-bcdfs] [-A alignment] [-a agno]... [-e binsize] [-h h1]... [-m binmult]",
          "summarize free space for filesystem", NULL };
 
 static int
@@ -147,8 +148,11 @@ init(
        totblocks = totexts = 0;
        aglist = NULL;
        hist = NULL;
-       while ((c = getopt(argc, argv, "a:bcde:h:m:s")) != EOF) {
+       while ((c = getopt(argc, argv, "A:a:bcde:h:m:s")) != EOF) {
                switch (c) {
+               case 'A':
+                       alignment = atoi(optarg);
+                       break;
                case 'a':
                        aglistadd(optarg);
                        break;
@@ -372,6 +376,9 @@ addtohist(
 {
        int             i;
 
+       if (alignment && (XFS_AGB_TO_FSB(mp,agno,agbno) % alignment))
+               return;
+
        if (dumpflag)
                dbprintf("%8d %8d %8d\n", agno, agbno, len);
        totexts++;
index 50da54eb824fbf9addb5a9dd3a364761d9541dad..6a97504b765bf2a2568c8dd60d7fc45b776e310b 100644 (file)
@@ -525,12 +525,17 @@ enables processing of realtime control file data.
 enables processing of realtime file data.
 .RE
 .TP
-.BI "freesp [\-bcds] [\-a " ag "] ... [\-e " i "] [\-h " h1 "] ... [\-m " m ]
+.BI "freesp [\-bcds] [\-A " alignment "] [\-a " ag "] ... [\-e " i "] [\-h " h1 "] ... [\-m " m ]
 Summarize free space for the filesystem. The free blocks are examined
 and totalled, and displayed in the form of a histogram, with a count
 of extents in each range of free extent sizes.
 .RS 1.0i
 .TP 0.4i
+.B \-A
+reports only free extents with starting blocks aligned to
+.I alignment
+blocks.
+.TP
 .B \-a
 adds
 .I ag