From 56e8dda60628bece67d12ecbb66744f7072a54cc Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Mon, 4 Apr 2022 15:16:31 +0200 Subject: [PATCH] df: fix calculation of IUse% Fixes #3355 --- src/uu/df/src/table.rs | 5 +++-- tests/by-util/test_df.rs | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/uu/df/src/table.rs b/src/uu/df/src/table.rs index fc2db1dab..3e0ae853f 100644 --- a/src/uu/df/src/table.rs +++ b/src/uu/df/src/table.rs @@ -154,6 +154,7 @@ impl From for Row { .. } = fs.usage; let bused = blocks - bfree; + let fused = files - ffree; Self { file: fs.file, fs_device: dev_name, @@ -177,12 +178,12 @@ impl From for Row { Some(bavail as f64 / ((bused + bavail) as f64)) }, inodes: files, - inodes_used: files - ffree, + inodes_used: fused, inodes_free: ffree, inodes_usage: if files == 0 { None } else { - Some(ffree as f64 / files as f64) + Some(fused as f64 / files as f64) }, } } diff --git a/tests/by-util/test_df.rs b/tests/by-util/test_df.rs index aba9f69f0..1a31109a3 100644 --- a/tests/by-util/test_df.rs +++ b/tests/by-util/test_df.rs @@ -1,4 +1,4 @@ -// spell-checker:ignore udev pcent +// spell-checker:ignore udev pcent iuse itotal iused ipcent use crate::common::util::*; #[test] @@ -179,6 +179,36 @@ fn test_use_percentage() { } } +#[test] +fn test_iuse_percentage() { + let output = new_ucmd!() + .args(&["--total", "--output=itotal,iused,ipcent"]) + .succeeds() + .stdout_move_str(); + + // Skip the header line. + let lines: Vec<&str> = output.lines().skip(1).collect(); + + for line in lines { + let mut iter = line.split_whitespace(); + let reported_inodes = iter.next().unwrap().parse::().unwrap(); + let reported_iused = iter.next().unwrap().parse::().unwrap(); + let reported_percentage = iter.next().unwrap(); + + if reported_percentage == "-" { + assert_eq!(0.0, reported_inodes); + assert_eq!(0.0, reported_iused); + } else { + let reported_percentage = reported_percentage[..reported_percentage.len() - 1] + .parse::() + .unwrap(); + let computed_percentage = (100.0 * (reported_iused / reported_inodes)).ceil() as u8; + + assert_eq!(computed_percentage, reported_percentage); + } + } +} + #[test] fn test_block_size_1024() { fn get_header(block_size: u64) -> String {