[pve-devel] [PATCH common] tools: df: handle a failing df
Thomas Lamprecht
t.lamprecht at proxmox.com
Mon Sep 11 11:49:13 CEST 2017
On 09/11/2017 09:23 AM, Wolfgang Bumiller wrote:
> This function assumed df() will work or hang, but it can
> also actually fail and return undef which results in
> warnings - let's silence those.
Easily reproducible with a non existing path or an unsupported
one, e.g.: /proc
> ---
> src/PVE/Tools.pm | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
> index 9ddcfda..7285c59 100644
> --- a/src/PVE/Tools.pm
> +++ b/src/PVE/Tools.pm
> @@ -985,7 +985,8 @@ sub df {
> $pipe->writer();
> eval {
> my $df = Filesys::Df::df($path, 1);
> - print {$pipe} "$df->{blocks}\n$df->{used}\n$df->{bavail}\n";
> + print {$pipe} "$df->{blocks}\n$df->{used}\n$df->{bavail}\n"
> + if defined($df);
> $pipe->close();
> };
> if (my $err = $@) {
> @@ -998,9 +999,9 @@ sub df {
> $pipe->reader();
>
> my $readvalues = sub {
> - $res->{total} = int((<$pipe> =~ /^(\d*)$/)[0]);
> - $res->{used} = int((<$pipe> =~ /^(\d*)$/)[0]);
> - $res->{avail} = int((<$pipe> =~ /^(\d*)$/)[0]);
> + $res->{total} = int(((<$pipe> // 0) =~ /^(\d*)$/)[0]);
> + $res->{used} = int(((<$pipe> // 0) =~ /^(\d*)$/)[0]);
> + $res->{avail} = int(((<$pipe> // 0) =~ /^(\d*)$/)[0]);
> };
> eval {
> run_with_timeout($timeout, $readvalues);
>
looks good to me.
More information about the pve-devel
mailing list