coreutils
coreutils copied to clipboard
`df` crashes in Windows WSL consistently
hbina@DESKTOP-56FNR1F:~/git/uutils$ RUST_BACKTRACE=full cargo run --quiet -- df
thread 'main' panicked at 'attempt to subtract with overflow', src/uu/df/src/table.rs:156:21
stack backtrace:
0: 0x55f2a7c8c0fd - std::backtrace_rs::backtrace::libunwind::trace::h22893a5306c091b4
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x55f2a7c8c0fd - std::backtrace_rs::backtrace::trace_unsynchronized::h29c3bc6f9e91819d
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x55f2a7c8c0fd - std::sys_common::backtrace::_print_fmt::he497d8a0ec903793
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:66:5
3: 0x55f2a7c8c0fd - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9c2a9d2774d81873
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:45:22
4: 0x55f2a7cb491c - core::fmt::write::hba4337c43d992f49
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/fmt/mod.rs:1194:17
5: 0x55f2a7c86e91 - std::io::Write::write_fmt::heb73de6e02cfabed
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/io/mod.rs:1655:15
6: 0x55f2a7c8dec5 - std::sys_common::backtrace::_print::h63c8b24acdd8e8ce
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:48:5
7: 0x55f2a7c8dec5 - std::sys_common::backtrace::print::h426700d6240cdcc2
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:35:9
8: 0x55f2a7c8dec5 - std::panicking::default_hook::{{closure}}::hc9a76eed0b18f82b
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:295:22
9: 0x55f2a7c8db79 - std::panicking::default_hook::h2e88d02087fae196
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:314:9
10: 0x55f2a7997f53 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h284c4db1ca42860e
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/alloc/src/boxed.rs:1875:9
11: 0x55f2a79660b5 - uucore::mods::panic::mute_sigpipe_panic::{{closure}}::h4b4a40b2e4bea746
at /home/hbina/git/uutils/src/uucore/src/lib/mods/panic.rs:39:13
12: 0x55f2a7c8e4c0 - std::panicking::rust_panic_with_hook::habfdcc2e90f9fd4c
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:702:17
13: 0x55f2a7c8e2b9 - std::panicking::begin_panic_handler::{{closure}}::he054b2a83a51d2cd
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:586:13
14: 0x55f2a7c8c5b4 - std::sys_common::backtrace::__rust_end_short_backtrace::ha48b94ab49b30915
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:138:18
15: 0x55f2a7c8e029 - rust_begin_unwind
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:584:5
16: 0x55f2a6e56d83 - core::panicking::panic_fmt::h366d3a309ae17c94
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/panicking.rs:143:14
17: 0x55f2a6e56c4d - core::panicking::panic::h8705e81f284be8a5
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/panicking.rs:48:5
18: 0x55f2a71a382f - <uu_df::table::Row as core::convert::From<uu_df::filesystem::Filesystem>>::from::hba5535f8aa5c754f
at /home/hbina/git/uutils/src/uu/df/src/table.rs:156:21
19: 0x55f2a71a4d7f - uu_df::table::Table::new::h1875a8226349fe89
at /home/hbina/git/uutils/src/uu/df/src/table.rs:391:27
20: 0x55f2a6eade35 - uu_df::uumain::uumain::hf36ef62df003998e
at /home/hbina/git/uutils/src/uu/df/src/df.rs:468:20
21: 0x55f2a6ead547 - uu_df::uumain::hc92cfb6ed7480c29
at /home/hbina/git/uutils/src/uu/df/src/df.rs:430:1
22: 0x55f2a6ea21a6 - coreutils::main::h130f48f5c8618649
at /home/hbina/git/uutils/src/bin/coreutils.rs:95:31
23: 0x55f2a6f0f44b - core::ops::function::FnOnce::call_once::h890a26570f8a80d0
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:227:5
24: 0x55f2a6f2ff6e - std::sys_common::backtrace::__rust_begin_short_backtrace::h18a228eb6b050702
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:122:18
25: 0x55f2a6ee2ff1 - std::rt::lang_start::{{closure}}::h01d390e9e6df3820
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/rt.rs:145:18
26: 0x55f2a7c7e28e - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::had4f69b3aefb47a8
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:259:13
27: 0x55f2a7c7e28e - std::panicking::try::do_call::hf2ad5355fcafe775
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:492:40
28: 0x55f2a7c7e28e - std::panicking::try::h0a63ac363423e61e
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:456:19
29: 0x55f2a7c7e28e - std::panic::catch_unwind::h18088edcecb8693a
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panic.rs:137:14
30: 0x55f2a7c7e28e - std::rt::lang_start_internal::{{closure}}::ha7dad166dc711761
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/rt.rs:128:48
31: 0x55f2a7c7e28e - std::panicking::try::do_call::hda0c61bf3a57d6e6
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:492:40
32: 0x55f2a7c7e28e - std::panicking::try::hbc940e68560040a9
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:456:19
33: 0x55f2a7c7e28e - std::panic::catch_unwind::haed0df2aeb3fa368
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panic.rs:137:14
34: 0x55f2a7c7e28e - std::rt::lang_start_internal::h9c06694362b5b80c
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/rt.rs:128:20
35: 0x55f2a6ee2fc0 - std::rt::lang_start::h8a483d04afe9c18b
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/rt.rs:144:17
36: 0x55f2a6ea287c - main
37: 0x7f79818e1083 - __libc_start_main
38: 0x55f2a6e5707e - _start
39: 0x0 - <unknown>
I've added some logs and as you can see, some files reports to have ffree with the value 1000000 which causes the subtraction to overflow. I am assuming its just WSL trickery?
/
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 65793553,
bfree: 62640709,
bavail: 59281170,
bavail_top_bit_set: false,
files: 16777216,
ffree: 16599203,
}
/mnt/wsl
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224430,
bavail: 3224430,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224416,
}
/init
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 122951562,
bfree: 17172736,
bavail: 17172736,
bavail_top_bit_set: false,
files: 999,
ffree: 1000000,
}
/dev
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3223909,
bfree: 3223909,
bavail: 3223909,
bavail_top_bit_set: false,
files: 3223909,
ffree: 3223762,
}
/run
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224425,
bavail: 3224425,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224392,
}
/run/lock
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224430,
bavail: 3224430,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224427,
}
/run/shm
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224430,
bavail: 3224430,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224429,
}
/run/user
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224430,
bavail: 3224430,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224429,
}
/proc/sys/fs/binfmt_misc
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224430,
bavail: 3224430,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224415,
}
/usr/lib/wsl/drivers
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 122951562,
bfree: 17172736,
bavail: 17172736,
bavail_top_bit_set: false,
files: 999,
ffree: 1000000,
}
/usr/lib/wsl/lib
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 122951562,
bfree: 17172736,
bavail: 17172736,
bavail_top_bit_set: false,
files: 999,
ffree: 1000000,
}
/sys/fs/cgroup/unified
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/cpuset
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/cpu
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/cpuacct
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/blkio
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/memory
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/devices
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/freezer
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/net_cls
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/perf_event
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/net_prio
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/hugetlb
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/pids
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/sys/fs/cgroup/rdma
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 0,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
/mnt/c
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 122951562,
bfree: 17172736,
bavail: 17172736,
bavail_top_bit_set: false,
files: 999,
ffree: 1000000,
}
/mnt/wsl/docker-desktop-data/isocache
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 65793553,
bfree: 62428099,
bavail: 59068560,
bavail_top_bit_set: false,
files: 16777216,
ffree: 16692174,
}
/mnt/wsl/docker-desktop/shared-sockets/guest-services
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224426,
bavail: 3224426,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224386,
}
/mnt/wsl/docker-desktop/shared-sockets/host-services
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 3224430,
bfree: 3224426,
bavail: 3224426,
bavail_top_bit_set: false,
files: 3224430,
ffree: 3224386,
}
/mnt/wsl/docker-desktop/docker-desktop-user-distro
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 4096,
blocks: 65793553,
bfree: 65762777,
bavail: 62403238,
bavail_top_bit_set: false,
files: 16777216,
ffree: 16774170,
}
/mnt/wsl/docker-desktop/cli-tools
[src/uucore/src/lib/features/fsext.rs:509] Self {
blocksize: statvfs.f_bsize as u64,
blocks: statvfs.f_blocks as u64,
bfree: statvfs.f_bfree as u64,
bavail: statvfs.f_bavail as u64,
bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1)))
!= 0,
files: statvfs.f_files as u64,
ffree: statvfs.f_ffree as u64,
} = FsUsage {
blocksize: 2048,
blocks: 179814,
bfree: 0,
bavail: 0,
bavail_top_bit_set: false,
files: 0,
ffree: 0,
}
@hbina are you going to try to fix this? thanks
Well, first I have not familiar with df nor WSL nor statvfs, but it sounds interesting so I'll take a look at it. Would appreciate any pointers though!
Edit: I have created a discussion thread here in WSL to get more info https://github.com/microsoft/WSL/discussions/8514
Following the stack trace, this is the line of code that causes a problem: https://github.com/uutils/coreutils/blob/38b6ce56ae3d3525e68c580bc31b862d8e3a5dfb/src/uu/df/src/table.rs#L156
Just to stop this from crashing, perhaps it would be enough to just do
let fused = files.checked_sub(ffree).unwrap_or(0);
I myself have a bit of interest in this issue actually. If you run with GNU df -i, you will find four particular filesystems that actually report negative used inodes, including /mnt/c.
Those four or so filesystems are mounted as 9p filesystems. Windows actually runs a 9p server which WSL instances connect to to access the host filesystem.
To retrieve statfs as per 9P.2000L protocol, it has to send a TSTATFS from client (WSL) to server (running in windows). It seems the Windows guys likely implemented their 9p server in such a way that the reported ffree and files are just stubbed out with some bogus values.
Anyhow, it seems that it’s just a matter of changing the datatypes from u64 to i64 to handle negative values. I could take a look at this maybe.