If an operation already has an error result recorded, don't
overwrite it with a new error code.
In order to ensure a request completes exactly once, return a
Boolean indicating whether setting the result was successful. If
two threads are racing to complete an operation (for example if a
slow-but-normal response message arrives at the same time timeout
processing commences) only the one that sets the final result
will finish its activity.
Signed-off-by: Alex Elder <elder@linaro.org> Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>