diff options
author | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-01-06 13:15:20 -0600 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-01-07 15:15:44 -0600 |
commit | 79ed24297236b7430d6ce0a1511ff70cf5b6015a (patch) | |
tree | 396b2696f4ec57851856702f27019a81a3aefecd /drivers/scsi/cxgb3i/cxgb3i_ddp.c | |
parent | 4be98c0ca304c8a47998b29a7993664f71791250 (diff) | |
download | blackbird-op-linux-79ed24297236b7430d6ce0a1511ff70cf5b6015a.tar.gz blackbird-op-linux-79ed24297236b7430d6ce0a1511ff70cf5b6015a.zip |
[SCSI] scsi_lib: fix DID_RESET status problems
Andrew Vaszquez said:
> There's a problem that is causing commands returned by the LLD with
> a DID_RESET status to be reissued with cleared cmd->sdb data which
> in our tests are manifesting in firmware detected overruns. Here's
> a snippet of a READ_10 scsi_cmnd upon completion by the storage
The problem is caused by:
commit b60af5b0adf0da24c673598c8d3fb4d4189a15ce
Author: Alan Stern <stern@rowland.harvard.edu>
Date: Mon Nov 3 15:56:47 2008 -0500
[SCSI] simplify scsi_io_completion()
Because scsi_release_buffers() is called before commands that go
through the ACTION_RETRY and ACTION_DELAYED_RETRY legs are requeued.
However, they're not re-prepared, so nothing ever reallocates the
buffer resources to them. Fix this by releasing the buffers only if
we're not going to go down these legs (but scsi_release_buffers() on
all legs including two in scsi_end_request(); this latter needs a
special version __scsi_release_buffers() because the final one can be
called after the request has been freed, so the bidi test in
scsi_release_buffers(), which touches the request has to be skipped).
Reported-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/cxgb3i/cxgb3i_ddp.c')
0 files changed, 0 insertions, 0 deletions