From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758754AbZELGt4 (ORCPT ); Tue, 12 May 2009 02:49:56 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756075AbZELGtq (ORCPT ); Tue, 12 May 2009 02:49:46 -0400 Received: from brick.kernel.dk ([93.163.65.50]:44832 "EHLO kernel.dk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755056AbZELGtp (ORCPT ); Tue, 12 May 2009 02:49:45 -0400 Date: Tue, 12 May 2009 08:49:46 +0200 From: Jens Axboe To: Tejun Heo Cc: Linux Kernel , linux-scsi , James Bottomley , Boaz Harrosh , FUJITA Tomonori Subject: Re: [PATCH block#for-2.6.31] scsi: fix resid_len mis-conversion in scsi_end_request() Message-ID: <20090512064945.GC5904@kernel.dk> References: <4A08DBBA.1000208@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A08DBBA.1000208@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 12 2009, Tejun Heo wrote: > Commit c3a4d78c580de4edc9ef0f7c59812fb02ceb037f introduced > rq->data_len and converted residual count users to it. While > converting, it mistakenly converted scsi_end_request() to finish > requests with residual count when it wants to do is fully complete the > request. Fix it by using blk_end_request_all() instead. > > This bug was spotted by Boaz Harrosh. Added, thanks. > > Signed-off-by: Tejun Heo > Spotted-by: Boaz Harrosh > Cc: Jens Axboe > Cc: FUJITA Tomonori > Cc: James Bottomley > --- > drivers/scsi/scsi_lib.c | 7 +------ > 1 file changed, 1 insertion(+), 6 deletions(-) > > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index a54bec9..e410d66 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c > @@ -546,14 +546,9 @@ static struct scsi_cmnd *scsi_end_request(struct scsi_cmnd *cmd, int error, > * to queue the remainder of them. > */ > if (blk_end_request(req, error, bytes)) { > - int leftover = blk_rq_bytes(req); > - > - if (blk_pc_request(req)) > - leftover = req->resid_len; > - > /* kill remainder if no retrys */ > if (error && scsi_noretry_cmd(cmd)) > - blk_end_request(req, error, leftover); > + blk_end_request_all(req, error); > else { > if (requeue) { > /* > -- Jens Axboe