From ff41d8c8877a537f3f1425b3a0636b2a14cd2491 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sat, 3 Nov 2012 14:45:49 +0000 Subject: [PATCH] scstadmin: Make _syswrite() translate EBUSY into "writing failed" (merge r4400 from trunk) git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/2.2.x@4591 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- .../scst-0.9.10/lib/SCST/SCST.pm | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/scstadmin/scstadmin.sysfs/scst-0.9.10/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-0.9.10/lib/SCST/SCST.pm index c48b28392..ea6e59678 100644 --- a/scstadmin/scstadmin.sysfs/scst-0.9.10/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-0.9.10/lib/SCST/SCST.pm @@ -4870,35 +4870,32 @@ sub _syswrite { my $bytes = syswrite($io, $cmd, $length); - if (!defined($bytes) && defined($res_file)) { - if ($! == EAGAIN) { - my $res = new IO::File $res_file, O_RDONLY; + if (!defined($bytes) && defined($res_file) && $! == EAGAIN) { + my $res_io = new IO::File $res_file, O_RDONLY; - if (!$res) { - cluck("FATAL: Failed opening $res_file: $!"); - return undef; - } + if (!$res_io) { + cluck("FATAL: Failed opening $res_file: $!"); + return undef; + } - my $wait = TRUE; - my $result; + my $res_val; - while ($wait && (($now + $TIMEOUT) > time())) { - sysread($res, $result, 8); - $wait = FALSE if ($! != EAGAIN); + while (($now + $TIMEOUT) > time()) { + if (!defined(sysread($res_io, $res_val, 8)) && + $! == EAGAIN) { sleep 1; - } - - if ($wait) { - my $_cmd = $cmd; chomp $_cmd; - cluck("Timeout while waiting for command '$_cmd' to complete"); - $bytes = undef; } else { - $bytes = length($cmd) if ($result == 0); + last; } + } - close $res; - } elsif ($! == EBUSY) { - return -1; + close $res_io; + + if (!defined($res_val)) { + my $_cmd = $cmd; chomp $_cmd; + cluck("Timeout while waiting for command '$_cmd' to complete"); + } elsif ($res_val == 0) { + $bytes = $length; } }