public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Boaz Harrosh <bharrosh@panasas.com>, Greg KH <greg@kroah.com>,
	Jens Axboe <jens.axboe@oracle.com>,
	Matthew Dharm <mdharm-usb@one-eyed-alien.net>,
	linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-scsi@vger.kernel.org
Subject: Re: [BUG] 2.6.24-git usb reset problems
Date: Tue, 29 Jan 2008 11:34:15 -0500	[thread overview]
Message-ID: <1201624455.3069.10.camel@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0801291032210.4229-100000@iolanthe.rowland.org>

On Tue, 2008-01-29 at 10:36 -0500, Alan Stern wrote:
> On Tue, 29 Jan 2008, Boaz Harrosh wrote:
> 
> > --- a/drivers/usb/storage/transport.c
> > +++ b/drivers/usb/storage/transport.c
> > @@ -462,18 +462,24 @@ static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe,
> >   * Common used function. Transfer a complete command
> >   * via usb_stor_bulk_transfer_sglist() above. Set cmnd resid
> >   */
> > -int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe,
> > -		      struct scsi_cmnd* srb)
> > +int usb_stor_bulk_srb_length(struct us_data* us, unsigned int pipe,
> > +		      struct scsi_cmnd* srb, unsigned length)
> >  {
> >  	unsigned int partial;
> >  	int result = usb_stor_bulk_transfer_sglist(us, pipe, scsi_sglist(srb),
> > -				      scsi_sg_count(srb), scsi_bufflen(srb),
> > +				      scsi_sg_count(srb), length,
> >  				      &partial);
> >  
> >  	scsi_set_resid(srb, scsi_bufflen(srb) - partial);
> >  	return result;
> >  }
> >  
> > +int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe,
> > +		struct scsi_cmnd* srb)
> > +{
> > +	return usb_stor_bulk_srb_length(us, pipe, srb, scsi_bufflen(srb));
> > +}
> > +
> 
> I don't like this patch very much.  Why add another layer of 
> indirection when the two subroutines do hardly any work?  Leave 
> usb_stor_bulk_srb() the way it was, and add usb_stor_bulk_srb_length() 
> as a separate routine that simply calls usb_stor_bulk_transfer_sglist() 
> and scsi_set_resid().
> 
> BTW, the standard coding style calls for a blank line after the list of 
> local variables at the start of a function or block.

There's another bug in the transport.c conversion in that the residuals
are updated with bogus data in several error cases, since
usb_stor_bulk_transfer_sglist() only sets the actual length if the urb
is actually sent.

I'm not sure if this is is the solution to the problem at hand, but it
definitely fixes another bug in the code.

James

diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index d9f4912..bab0858 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -465,7 +465,7 @@ static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe,
 int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe,
 		      struct scsi_cmnd* srb)
 {
-	unsigned int partial;
+	unsigned int partial = scsi_get_resid(srb);
 	int result = usb_stor_bulk_transfer_sglist(us, pipe, scsi_sglist(srb),
 				      scsi_sg_count(srb), scsi_bufflen(srb),
 				      &partial);



  parent reply	other threads:[~2008-01-29 16:34 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-28 20:49 [BUG] 2.6.24-git usb reset problems Jens Axboe
2008-01-28 21:21 ` Greg KH
2008-01-29  7:48   ` Jens Axboe
2008-01-29 12:15   ` Boaz Harrosh
2008-01-29 13:54     ` Jens Axboe
2008-01-29 14:06       ` Boaz Harrosh
2008-01-29 14:11         ` Jens Axboe
2008-01-29 14:14           ` Boaz Harrosh
2008-01-29 14:31           ` Oliver Neukum
2008-01-29 14:31             ` Jens Axboe
2008-01-29 18:39               ` Jens Axboe
2008-01-29 19:09                 ` Boaz Harrosh
2008-01-29 19:10                 ` Matthew Dharm
2008-01-29 19:15                   ` Jens Axboe
2008-01-29 19:26                     ` Jens Axboe
2008-01-29 19:37                     ` Matthew Dharm
2008-01-29 19:33                   ` James Bottomley
2008-01-29 19:35                     ` Jens Axboe
2008-01-29 19:45                       ` Jens Axboe
2008-01-29 19:58                         ` Boaz Harrosh
2008-01-29 20:03                           ` Jens Axboe
2008-01-29 20:04                             ` James Bottomley
2008-01-29 20:06                               ` Jens Axboe
2008-01-29 20:24                                 ` James Bottomley
2008-01-29 20:53                                   ` Boaz Harrosh
2008-01-29 20:09                           ` Boaz Harrosh
2008-01-29 20:13                             ` Jens Axboe
2008-01-29 20:26                               ` Boaz Harrosh
2008-01-30 10:27                         ` Geert Uytterhoeven
2008-01-30 10:38                           ` Jens Axboe
2008-01-30 14:38                             ` James Bottomley
2008-01-30 18:06                               ` Jens Axboe
2008-01-30 19:07                                 ` Jens Axboe
2008-01-29 15:50             ` Boaz Harrosh
2008-01-29 17:42               ` Oliver Neukum
2008-01-29 14:13         ` Boaz Harrosh
2008-01-29 15:00     ` Matthew Dharm
2008-01-29 15:36     ` Alan Stern
2008-01-29 15:54       ` Boaz Harrosh
2008-01-29 16:34       ` James Bottomley [this message]
2008-01-29 18:27         ` Boaz Harrosh
2008-01-29 18:48           ` James Bottomley
2008-01-29 18:58             ` Boaz Harrosh
2008-01-29 19:17               ` James Bottomley
2008-01-29 19:28                 ` Boaz Harrosh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1201624455.3069.10.camel@localhost.localdomain \
    --to=james.bottomley@hansenpartnership.com \
    --cc=bharrosh@panasas.com \
    --cc=greg@kroah.com \
    --cc=jens.axboe@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mdharm-usb@one-eyed-alien.net \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox