提交 ac44e5b2 编写于 作者: J Jens Axboe

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: NJens Axboe <jens.axboe@oracle.com>
上级 26308eab
...@@ -1287,6 +1287,7 @@ static void cciss_softirq_done(struct request *rq) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册