git: 1a566dd6a480 - stable/13 - df: do not report a 100% full inode usage on fs without inodes

From: Baptiste Daroussin <bapt_at_FreeBSD.org>
Date: Wed, 12 Oct 2022 09:20:40 UTC
The branch stable/13 has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=1a566dd6a48067b0bf93ef813e01a515be4997ce

commit 1a566dd6a48067b0bf93ef813e01a515be4997ce
Author:     Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2022-03-10 14:28:50 +0000
Commit:     Baptiste Daroussin <bapt@FreeBSD.org>
CommitDate: 2022-10-12 09:20:09 +0000

    df: do not report a 100% full inode usage on fs without inodes
    
    Before:
    devfs    2        2         0   100%       0          0  100%   /dev
    
    After:
    devfs    2        2         0   100%       0          0     -   /dev
    
    The previous behaviour was confusing for end users and many monitoring tools
    
    Note the linux df tools is also using the same syntax '-' for such filesystem
    
    MFC After:              2 weeks
    Reviewed by:            manu, emaste, imp
    Differential Revision:  https://reviews.freebsd.org/D34515
    
    (cherry picked from commit 2eee44bd5ebcb88bf304215be1b0c68b6802a924)
---
 bin/df/df.1 | 5 ++++-
 bin/df/df.c | 9 ++++++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/bin/df/df.1 b/bin/df/df.1
index d542dbde8067..64e471fedc42 100644
--- a/bin/df/df.1
+++ b/bin/df/df.1
@@ -29,7 +29,7 @@
 .\"     @(#)df.1	8.3 (Berkeley) 5/8/95
 .\" $FreeBSD$
 .\"
-.Dd October 5, 2020
+.Dd March 11, 2022
 .Dt DF 1
 .Os
 .Sh NAME
@@ -109,6 +109,9 @@ In conjunction with the
 or
 .Fl H
 options, the number of inodes is scaled by powers of 1000.
+In case the filesystem has no inodes then
+.Sq -
+is displayed instead of the usage percentage.
 .It Fl k
 Use 1024 byte (1 Kibibyte) blocks rather than the default.
 This overrides the
diff --git a/bin/df/df.c b/bin/df/df.c
index 63c37de92d62..627d8b1c861d 100644
--- a/bin/df/df.c
+++ b/bin/df/df.c
@@ -561,9 +561,12 @@ prtstat(struct statfs *sfsp, struct maxwidths *mwp)
 			xo_emit(format, mwp->iused, (intmax_t)used,
 			    mwp->ifree, (intmax_t)sfsp->f_ffree);
 		}
-		xo_emit(" {:inodes-used-percent/%4.0f}{U:%%} ",
-			inodes == 0 ? 100.0 :
-			(double)used / (double)inodes * 100.0);
+		if (inodes == 0)
+			xo_emit(" {:inodes-used-percent/    -}{U:} ");
+		else {
+			xo_emit(" {:inodes-used-percent/%4.0f}{U:%%} ",
+				(double)used / (double)inodes * 100.0);
+		}
 	} else
 		xo_emit("  ");
 	if (strncmp(sfsp->f_mntfromname, "total", MNAMELEN) != 0)