[PATCH] blk: missing add of padded bytes to io completion byte count

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Boaz Harrosh
Date: Wednesday, March 5, 2008 - 3:16 am

On Wed, Mar 05 2008 at 2:26 +0200, FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> wrote:

No this commit is a serious bug, and the only fix is like you suggested
in __end_that_request_first. This is because it breaks that scsi-ml loop
where scsi_bufflen() can be less then blk_rq_bytes(). In that case this 
commit is a data corruption.


Submitted is the right fix to this problem, as pointed out by TOMO.
Please test it solves the CD burning problem.
(The patch includes the revert of commit e97a294e)
---
From: Boaz Harrosh <bharrosh@panasas.com>
Date: Wed, 5 Mar 2008 12:07:12 +0200
Subject: [PATCH] blk: missing add of padded bytes to io completion byte count

the commit e97a294ef6938512b655b1abf17656cf2b26f709 was very wrong. This is
because scsi-ml supports the ability to split a request into smaller chunks,
in which case scsi_bufflen() is smaller then request length. Then at completion
time the remainder can be issued as a new scsi command. In that case the above
commit is a data corruption.

Also in this fix all users of block layer are taken care of, and not only
scsi devices.

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
 block/blk-core.c    |    4 ++++
 drivers/scsi/scsi.c |    2 +-
 2 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index 2a438a9..37fcccc 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1549,6 +1549,9 @@ static int __end_that_request_first(struct request *req, int error,
 			     nr_bytes >> 9, req->sector);
 	}
 
+	if (nr_bytes >= blk_rq_bytes(req))
+		nr_bytes += req->extra_len;
+
 	total_bytes = bio_nbytes = 0;
 	while ((bio = req->bio) != NULL) {
 		int nbytes;
@@ -1616,6 +1619,7 @@ static int __end_that_request_first(struct request *req, int error,
 	if (!req->bio)
 		return 0;
 
+	BUG_ON(total_bytes >= blk_rq_bytes(req));
 	/*
 	 * if the request wasn't completed, update state
 	 */
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index e5c6f6a..fecba05 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -757,7 +757,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
 				"Notifying upper driver of completion "
 				"(result %x)\n", cmd->result));
 
-	good_bytes = scsi_bufflen(cmd) + cmd->request->extra_len;
+	good_bytes = scsi_bufflen(cmd);
         if (cmd->request->cmd_type != REQ_TYPE_BLOCK_PC) {
 		drv = scsi_cmd_to_driver(cmd);
 		if (drv->done)
-- 
1.5.3.3



--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
regression: CD burning (k3b) went broke, Mike Galbraith, (Thu Feb 21, 1:42 am)
Re: regression: CD burning (k3b) went broke, Jens Axboe, (Fri Feb 22, 12:32 am)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Sat Feb 23, 12:42 am)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Sun Feb 24, 12:54 am)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Tue Feb 26, 2:48 am)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Tue Feb 26, 6:36 am)
Re: regression: CD burning (k3b) went broke, Andrew Morton, (Tue Feb 26, 4:08 pm)
Re: regression: CD burning (k3b) went broke, Jeff Garzik, (Tue Feb 26, 5:46 pm)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Tue Feb 26, 7:24 pm)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Tue Feb 26, 7:58 pm)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Tue Feb 26, 11:00 pm)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Wed Feb 27, 12:07 am)
Re: regression: CD burning (k3b) went broke, Tejun Heo, (Thu Feb 28, 12:43 am)
Re: regression: CD burning (k3b) went broke, Mike Galbraith, (Thu Feb 28, 1:20 am)
[PATCH] block: fix residual byte count handling, Tejun Heo, (Thu Feb 28, 1:50 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Thu Feb 28, 8:35 am)
Re: [PATCH] block: fix residual byte count handling, Tejun Heo, (Thu Feb 28, 8:46 am)
Re: [PATCH] block: fix residual byte count handling, James Bottomley, (Fri Feb 29, 9:47 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Fri Feb 29, 1:11 pm)
Re: [PATCH] block: fix residual byte count handling, Tejun Heo, (Fri Feb 29, 11:17 pm)
Re: [PATCH] block: fix residual byte count handling, James Bottomley, (Sat Mar 1, 8:19 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Sun Mar 2, 7:52 am)
Re: [PATCH] block: fix residual byte count handling, Mike Christie, (Sun Mar 2, 11:46 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Sun Mar 2, 8:27 pm)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Sun Mar 2, 8:59 pm)
[PATCH 1/2] block: fix residual byte count handling, Tejun Heo, (Sun Mar 2, 11:08 pm)
[PATCH] block: separate out padding from alignment, Tejun Heo, (Sun Mar 2, 11:10 pm)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Mon Mar 3, 1:26 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Mon Mar 3, 5:17 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Mon Mar 3, 6:50 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Mon Mar 3, 7:01 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Mon Mar 3, 7:52 am)
Re: [PATCH] block: separate out padding from alignment, James Bottomley, (Mon Mar 3, 11:27 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Mon Mar 3, 7:11 pm)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Tue Mar 4, 1:53 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 1:59 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Tue Mar 4, 2:06 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Tue Mar 4, 2:22 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 2:35 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 2:46 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 5:37 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 5:39 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 5:43 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 5:45 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 5:58 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 6:03 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Tue Mar 4, 6:30 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 7:25 am)
Re: [PATCH] block: fix residual byte count handling, James Bottomley, (Tue Mar 4, 9:04 am)
Re: [PATCH] block: fix residual byte count handling, Tejun Heo, (Tue Mar 4, 10:59 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 11:17 am)
Re: [PATCH] block: fix residual byte count handling, Boaz Harrosh, (Tue Mar 4, 11:26 am)
Re: [PATCH] block: fix residual byte count handling, James Bottomley, (Tue Mar 4, 11:27 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 11:29 am)
Re: [PATCH] block: fix residual byte count handling, Tejun Heo, (Tue Mar 4, 11:33 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 11:35 am)
Re: [PATCH] block: fix residual byte count handling, Tejun Heo, (Tue Mar 4, 11:35 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 11:45 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 11:45 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 11:46 am)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 11:49 am)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 11:54 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Tue Mar 4, 12:19 pm)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 12:25 pm)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 12:26 pm)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 12:28 pm)
Re: [PATCH] block: fix residual byte count handling, Mike Galbraith, (Tue Mar 4, 12:33 pm)
Re: [PATCH] block: fix residual byte count handling, Jens Axboe, (Tue Mar 4, 12:34 pm)
Re: [PATCH] block: fix residual byte count handling, Kiyoshi Ueda, (Tue Mar 4, 12:42 pm)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Tue Mar 4, 5:26 pm)
[PATCH] blk: missing add of padded bytes to io completion ..., Boaz Harrosh, (Wed Mar 5, 3:16 am)
Re: [PATCH] block: fix residual byte count handling, FUJITA Tomonori, (Wed Mar 5, 9:56 pm)
Re: [PATCH] block: fix residual byte count handling, Tejun Heo, (Wed Mar 5, 10:02 pm)