Skip to content

Commit

Permalink
cciss: fix residual count for block pc requests
Browse files Browse the repository at this point in the history
We must complete the full request, so store the request count and then set
the ->data_len to the residual count from the hardware.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
  • Loading branch information
Jens Axboe committed Apr 7, 2009
1 parent 26308ea commit ac44e5b
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/block/cciss.c
Original file line number Diff line number Diff line change
Expand Up @@ -1287,6 +1287,7 @@ static void cciss_softirq_done(struct request *rq)
{
CommandList_struct *cmd = rq->completion_data;
ctlr_info_t *h = hba[cmd->ctlr];
unsigned int nr_bytes;
unsigned long flags;
u64bit temp64;
int i, ddir;
Expand All @@ -1308,7 +1309,14 @@ static void cciss_softirq_done(struct request *rq)
printk("Done with %p\n", rq);
#endif /* CCISS_DEBUG */

if (blk_end_request(rq, (rq->errors == 0) ? 0 : -EIO, blk_rq_bytes(rq)))
/*
* Store the full size and set the residual count for pc requests
*/
nr_bytes = blk_rq_bytes(rq);
if (blk_pc_request(rq))
rq->data_len = cmd->err_info->ResidualCnt;

if (blk_end_request(rq, (rq->errors == 0) ? 0 : -EIO, nr_bytes))
BUG();

spin_lock_irqsave(&h->lock, flags);
Expand Down

0 comments on commit ac44e5b

Please sign in to comment.