diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index a96087ec89c13b77038999629e804bdec63e6ca4..50544fb308e46e394b7857a318d5f4d0c43c44c7 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -6841,13 +6841,11 @@ class LUTestDelay(NoHooksLU):
         raise errors.OpExecError("Error during master delay test")
     if self.op.on_nodes:
       result = self.rpc.call_test_delay(self.op.on_nodes, self.op.duration)
-      if not result:
-        raise errors.OpExecError("Complete failure from rpc call")
       for node, node_result in result.items():
-        node_result.Raise()
-        if not node_result.data:
-          raise errors.OpExecError("Failure during rpc call to node %s,"
-                                   " result: %s" % (node, node_result.data))
+        msg = node_result.RemoteFailMsg()
+        if msg:
+          raise errors.OpExecError("Failure during rpc call to node %s: %s"
+                                   % (node, msg))
 
 
 class IAllocator(object):
diff --git a/lib/utils.py b/lib/utils.py
index 49f4c99d63d369578aaa5561a74918a7286392b1..89436d8bbb76940f6ece1fd0392d48c091d9a144 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -1387,9 +1387,9 @@ def TestDelay(duration):
 
   """
   if duration < 0:
-    return False
+    return False, "Invalid sleep duration"
   time.sleep(duration)
-  return True
+  return True, None
 
 
 def _CloseFDNoErr(fd, retries=5):