On Fri, 2012-05-04 at 13:43 -0700, Greg KH wrote:
> 3.3-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Stanislav Yakovlev <[email protected]>
> 
> commit dd447319895d0c0af423e483d9b63f84f3f8869a upstream.
> 
> Driver incorrectly validates command completion: instead of waiting
> for a command to be acknowledged it continues execution.  Most of the
> time driver gets acknowledge of the command completion in a tasklet
> before it executes the next one. But sometimes it sends the next
> command before it gets acknowledge for the previous one. In such a
> case one of the following error messages appear in the log:
[...]
> +     now = jiffies;
> +     end = now + HOST_COMPLETE_TIMEOUT;
> +again:
>       rc = wait_event_interruptible_timeout(priv->wait_command_queue,
>                                             !(priv->
>                                               status & STATUS_HCMD_ACTIVE),
> -                                           HOST_COMPLETE_TIMEOUT);
> +                                           end - now);
> +     if (rc < 0) {
> +             now = jiffies;
> +             if (time_before(now, end))
> +                     goto again;
> +             rc = 0;
> +     }
[...]

If you don't want the wait to be interrupted, use wait_event_timeout()
instead of this ridiculous loop!

Ben.

-- 
Ben Hutchings
Hoare's Law of Large Problems:
        Inside every large problem is a small problem struggling to get out.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to