lkml.org 
[lkml]   [2005]   [Dec]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH rc6] block: Fix CDROMEJECT to work in more cases
On Tue, Dec 20 2005, Linus Torvalds wrote:
>
>
> On Tue, 20 Dec 2005, Jens Axboe wrote:
> >
> > WRITEs cannot have length 0, and READs cannot as well. Since it's just
> > one bit for direction, those are the rules.
>
> Jens, your logic doesn't make sense.

It does

> There clearly _are_ commands with a 0 data-length.

Of course, that's not what I'm saying. What I am saying is interpreted
from the driver or further down in the io stack.

> And commands _have_ to be either READ or WRITE. We don't have a choice.
> ll_rw_block: blk_get_request() even has a BIG_ON() that enforces that.

Yes, it has to choose one of the two pools.

> So claiming that reads and writes cannot have zere data-length is INSANE.

There are two sides to this - looking at the request allocations pools,
yes if you want a request you have to tell from which pool you want it
from. But a request that originates from that particular pool (in this
case the write pool), does _not_ have to imply any transfer of data from
a device!

> So reads and writes HAVE to accept a zero data length. End of story. If

That's not up for debate, of course that is the case. Otherwise we could
not issue any request unless it needed to transfer data from a device.
Just because an empty request happens to have the data direction bit
set, does not mean it wants to transfer data to the device. By
definition, that is an impossibility since there's nothing to transfer.

> there is some path in the SCSI layer that refuses it, that part must be
> fixed, or you have to add a new "NONE" (and perhaps "BOTH") direction.

There _was_ a bug in the SCSI layer, because it had logic like this:

if (rq_data_dir(req) == WRITE)
DMA_TO_DEVICE
else if (req->data_len)
DMA_FROM_DEVICE
else
DMA_NONE

which was buggy, because for it to transfer data to the device, both the
direction bit _and_ a data length must be set.

--
Jens Axboe

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-12-20 19:39    [W:0.121 / U:0.096 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site