[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: use of "stat -"
On 12.05.2020 16:19, Wei Liu wrote: > On Tue, May 12, 2020 at 12:58:46PM +0200, Jan Beulich wrote: >> now that I've been able to do a little bit of work from the office >> again, I've run into a regression from b72682c602b8 "scripts: Use >> stat to check lock claim". On one of my older machines I've noticed >> guests wouldn't launch anymore, which I've tracked down to the >> system having an old stat on it. Yes, the commit says the needed >> behavior has been available since 2009, but please let's not forget >> that we continue to support building with tool chains from about >> 2007. >> >> Putting in place and using newer tool chain versions without >> touching the base distro is pretty straightforward. Replacing the >> coreutils package isn't, and there's not even an override available >> by which one could point at an alternative one. Hence I think >> bumping the minimum required versions of basic tools should be >> done even more carefully than bumping required tool chain versions >> (which we've not dared to do in years). After having things >> successfully working again with a full revert, I'm now going to >> experiment with adapting behavior to stat's capabilities. Would >> something like that be acceptable (if it works out)? > > Are you asking for reverting that patch? Well, I assume the patch has its merits, even if I don't really understand what they are from its description. I'm instead asking whether something like the below (meanwhile tested) would be acceptable. Jan --- unstable.orig/tools/hotplug/Linux/locking.sh +++ unstable/tools/hotplug/Linux/locking.sh @@ -42,6 +42,12 @@ claim_lock() # it being possible to safely remove the lockfile when done. # See below for a correctness proof. local stat + local use_stat + local rightfile + if stat - 2>/dev/null >/dev/null + then + use_stat=y + fi while true; do eval "exec $_lockfd<>$_lockfile" flock -x $_lockfd || return $? @@ -56,7 +62,17 @@ claim_lock() # WW.XXX # YY.ZZZ # which need to be separated and compared. - if stat=$( stat -L -c '%D.%i' - $_lockfile 0<&$_lockfd 2>/dev/null ) + if [ x$use_stat != xy ] + then + # Fall back to the original Perl approach. + rightfile=$( perl -e ' + open STDIN, "<&'$_lockfd'" or die $!; + my $fd_inum = (stat STDIN)[1]; die $! unless defined $fd_inum; + my $file_inum = (stat $ARGV[0])[1]; + print "y\n" if $fd_inum eq $file_inum; + ' "$_lockfile" ) + if [ x$rightfile = xy ]; then break; fi + elif stat=$( stat -L -c '%D.%i' - $_lockfile 0<&$_lockfd 2>/dev/null ) then local file_stat local fd_stat
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |