Thread (38 messages) 38 messages, 7 authors, 2020-12-24

Re: [PATCH v1 0/6] no-copy bvec

From: Pavel Begunkov <asml.silence@gmail.com>
Date: 2020-12-23 20:37:09
Also in: io-uring, linux-block, linux-fsdevel, linux-scsi, linux-xfs, lkml, target-devel

On 23/12/2020 20:23, Douglas Gilbert wrote:
On 2020-12-23 11:04 a.m., James Bottomley wrote:
quoted
On Wed, 2020-12-23 at 15:51 +0000, Christoph Hellwig wrote:
quoted
On Wed, Dec 23, 2020 at 12:52:59PM +0000, Pavel Begunkov wrote:
quoted
Can scatterlist have 0-len entries? Those are directly translated
into bvecs, e.g. in nvme/target/io-cmd-file.c and
target/target_core_file.c. I've audited most of others by this
moment, they're fine.
For block layer SGLs we should never see them, and for nvme neither.
I think the same is true for the SCSI target code, but please double
check.
Right, no-one ever wants to see a 0-len scatter list entry.  The reason
is that every driver uses the sgl to program the device DMA engine in
the way NVME does.  a 0 length sgl would be a dangerous corner case:
some DMA engines would ignore it and others would go haywire, so if we
ever let a 0 length list down into the driver, they'd have to
understand the corner case behaviour of their DMA engine and filter it
accordingly, which is why we disallow them in the upper levels, since
they're effective nops anyway.
When using scatter gather lists at the far end (i.e. on the storage device)
the T10 examples (WRITE SCATTERED and POPULATE TOKEN in SBC-4) explicitly
allow the "number of logical blocks" in their sgl_s to be zero and state
that it is _not_ to be considered an error.
It's fine for my case unless it leaks them out of device driver to the
net/block layer/etc. Is it?

-- 
Pavel Begunkov
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help