Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac44e5b2 authored by Jens Axboe's avatar Jens Axboe
Browse files

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: default avatarJens Axboe <jens.axboe@oracle.com>
parent 26308eab
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);