From e53050ed13bbe9c8e8122c0b7b34b2e4b33f242e Mon Sep 17 00:00:00 2001 From: Emmanuel Kasper Date: Thu, 29 Jun 2017 14:48:13 +0200 Subject: [PATCH] Fixes: #1415 do not block pvestatd when nfsd is stopped on the server side Wrap the -d test with run_or_get_killed sub this test can make pvestatd hang on I/O wait when a nfsd process is stopped This might help with other file based storages, for instance directory storages on unplugged USB devices. --- PVE/Storage/Plugin.pm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index b640712..6f72cee 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -853,8 +853,13 @@ sub activate_storage { die "storage definintion has no path\n" if !$path; - die "unable to activate storage '$storeid' - " . - "directory '$path' does not exist\n" if ! -d $path; + # this path test may hang indefinitely on unresponsive mounts + my $timeout = 2; + if (! PVE::Tools::run_fork_with_timeout($timeout, sub {-d $path})) { + die "unable to activate storage '$storeid' - " . + "directory '$path' does not exist or is unreachable\n"; + } + return if defined($scfg->{mkdir}) && !$scfg->{mkdir};