cciss: fix residual count for block pc requests
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>
This commit is contained in:
parent
26308eab69
commit
ac44e5b2ed
@ -1287,6 +1287,7 @@ static void cciss_softirq_done(struct request *rq)
|
|||||||
{
|
{
|
||||||
CommandList_struct *cmd = rq->completion_data;
|
CommandList_struct *cmd = rq->completion_data;
|
||||||
ctlr_info_t *h = hba[cmd->ctlr];
|
ctlr_info_t *h = hba[cmd->ctlr];
|
||||||
|
unsigned int nr_bytes;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u64bit temp64;
|
u64bit temp64;
|
||||||
int i, ddir;
|
int i, ddir;
|
||||||
@ -1308,7 +1309,14 @@ static void cciss_softirq_done(struct request *rq)
|
|||||||
printk("Done with %p\n", rq);
|
printk("Done with %p\n", rq);
|
||||||
#endif /* CCISS_DEBUG */
|
#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();
|
BUG();
|
||||||
|
|
||||||
spin_lock_irqsave(&h->lock, flags);
|
spin_lock_irqsave(&h->lock, flags);
|
||||||
|
Loading…
Reference in New Issue
Block a user