All of lore.kernel.org
 help / color / mirror / Atom feed
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
To: stern@rowland.harvard.edu
Cc: tomof@acm.org, fujita.tomonori@lab.ntt.co.jp,
	bharrosh@panasas.com, linux-ide@vger.kernel.org,
	linux-scsi@vger.kernel.org,
	James.Bottomley@HansenPartnership.com, jens.axboe@oracle.com,
	dougg@torque.net, Geert.Uytterhoeven@sonycom.com,
	tony.luck@intel.com, Mark_Salyzyn@adaptec.com,
	ed.lin@promise.com, linuxraid@amcc.com,
	linux-usb@vger.kernel.org
Subject: Re: [PATCH 00/10] sg buffer copy helper functions
Date: Sun, 16 Mar 2008 20:55:04 +0900	[thread overview]
Message-ID: <20080316205500I.tomof@acm.org> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0803141036150.4478-100000@iolanthe.rowland.org>

On Fri, 14 Mar 2008 10:46:52 -0400 (EDT)
Alan Stern <stern@rowland.harvard.edu> wrote:

> On Fri, 14 Mar 2008, FUJITA Tomonori wrote:
> 
> > > If nents doesn't change then for_each_sg() won't work right.  There 
> > > could be an alternative macro:
> > 
> > Oops, I thought that for_each_sg is defined like:
> > 
> > #define for_each_sg(sglist, sg, nr, __i)	\
> > 	for (__i = 0, sg = (sglist); __i < (nr) && sg; __i++, sg = sg_next(sg))
> > 
> > 
> > > /*
> > >  * Loop over each sg element, stopping at the end of the chain
> > >  */
> > > #define for_each_sg_all(sglist, sg, __i)	\
> > > 	for (__i = 0, sg = (sglist); sg; __i++, sg = sg_next(sg))
> > > 
> > > If you added this macro to include/linux/scatterlist.h and used it
> > > instead of for_each_sg() then you can get rid of nents entirely.  
> > > However I'm not sure whether this would be safe.  Do people sometimes 
> > > use a subset of the entries in a scatterlist?
> > 
> > IIRC, some drivers do that (though they might use sg_next).
> 
> But will usb-storage ever receive a scatterlist like that?  For 
> example, if there are three 4096-byte entries in the list, but the 
> transfer length is 8192 and nents is 2, then there could be a problem.

If LLDs don't use the padding or drain buffer feature (USB uses
neither), scsi midlayer doesn't send such (that is, the block layer
doesn't create such).


> (This could happen if some software layer preallocated an sg chain and
> used it over and over again, each time setting nents to whatever value
> was needed for a particular transfer.)
> 
> > I don't think that we add a new macro just for this function. We could
> > change for_each_sg in the above way or we could just do in
> > usb_stor_access_xfer_buf
> > 
> > for (i = 0, sg = *sgl; i < nents && sg; i++, sg = sg_next(sg))
> 
> This wouldn't be safe in the example I just mentioned if the
> usb-storage driver tried to do three transfers, each of 4096 bytes.  
> All three would succeed, but in fact the third call shouldn't transfer
> any data.

As I explained above, it should be safe with USB. But in general, LLDs
should not rely on a scatterlist about how much data they transfer.

  reply	other threads:[~2008-03-16 11:55 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-09  4:44 [PATCH 00/10] sg buffer copy helper functions FUJITA Tomonori
2008-03-09  4:44 ` [PATCH 01/10] block: add " FUJITA Tomonori
2008-03-09  4:44   ` [PATCH 02/10] scsi: add wrapper functions for " FUJITA Tomonori
2008-03-09  4:44     ` [PATCH 03/10] scsi_debug: use " FUJITA Tomonori
2008-03-09  4:44       ` [PATCH 04/10] ps3rom: use sg buffer copy helper funcitons FUJITA Tomonori
2008-03-09  4:44         ` [PATCH 05/10] simscsi: " FUJITA Tomonori
2008-03-09  4:44           ` [PATCH 06/10] ips: " FUJITA Tomonori
2008-03-09  4:44             ` [PATCH 07/10] aacraid: use sg buffer copy helper functions FUJITA Tomonori
2008-03-09  4:44               ` [PATCH 08/10] stex: " FUJITA Tomonori
2008-03-09  4:44                 ` [PATCH 09/10] 3w-xxxx: " FUJITA Tomonori
2008-03-09  4:44                   ` [PATCH 10/10] 3w-9xxx: " FUJITA Tomonori
2008-03-10 12:45               ` [PATCH 07/10] aacraid: " Mark Salyzyn
2008-03-10 12:46             ` [PATCH 06/10] ips: use sg buffer copy helper funcitons Mark Salyzyn
2008-03-10 10:15         ` [PATCH 04/10] ps3rom: " Geert Uytterhoeven
2008-03-10 14:37   ` [PATCH 01/10] block: add sg buffer copy helper functions Jens Axboe
2008-03-10 10:14 ` [PATCH 00/10] " Geert Uytterhoeven
2008-03-10 14:34   ` FUJITA Tomonori
     [not found] ` <1205037877-12843-1-git-send-email-fujita.tomonori-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2008-03-10 14:10   ` Boaz Harrosh
2008-03-10 22:39     ` FUJITA Tomonori
2008-03-11 10:05       ` Boaz Harrosh
2008-03-11 20:09       ` Alan Stern
2008-03-12  0:14         ` FUJITA Tomonori
2008-03-12  0:28           ` FUJITA Tomonori
2008-03-12  2:24             ` FUJITA Tomonori
2008-03-12 16:04             ` Alan Stern
2008-03-13  0:03               ` FUJITA Tomonori
2008-03-13  0:18                 ` FUJITA Tomonori
2008-03-13 18:34                   ` Alan Stern
2008-03-12 16:01           ` Alan Stern
2008-03-12 16:26             ` Boaz Harrosh
2008-03-13  0:03             ` FUJITA Tomonori
2008-03-13 18:32               ` Alan Stern
2008-03-14  9:35                 ` FUJITA Tomonori
     [not found]                   ` <20080314183434J.tomof-HInyCGIudOg@public.gmane.org>
2008-03-14 14:46                     ` Alan Stern
2008-03-16 11:55                       ` FUJITA Tomonori [this message]
2008-03-16 17:18                         ` Alan Stern
2008-03-17  3:23                           ` FUJITA Tomonori
2008-03-17 14:06                             ` Alan Stern

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=20080316205500I.tomof@acm.org \
    --to=fujita.tomonori@lab.ntt.co.jp \
    --cc=Geert.Uytterhoeven@sonycom.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=Mark_Salyzyn@adaptec.com \
    --cc=bharrosh@panasas.com \
    --cc=dougg@torque.net \
    --cc=ed.lin@promise.com \
    --cc=jens.axboe@oracle.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linuxraid@amcc.com \
    --cc=stern@rowland.harvard.edu \
    --cc=tomof@acm.org \
    --cc=tony.luck@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.