Re: NVMe over Fabrics target implementation
From: Christoph Hellwig
Date: Wed Jun 08 2016 - 08:19:39 EST
On Tue, Jun 07, 2016 at 10:21:41PM -0700, Nicholas A. Bellinger wrote:
> *) Extensible to multiple types of backend drivers.
>
> nvme-target needs a way to absorb new backend drivers, that
> does not effect existing configfs group layout or attributes.
>
> Looking at the nvmet/configfs layout as-is, there are no multiple
> backend types defined, nor a way to control backend feature bits
> exposed to nvme namespaces at runtime.
And that's very much intentional. We have a very well working block
layer which we're going to use, no need to reivent it. The block
layer supports NVMe pass through just fine in case we'll need it,
as I spent the last year preparing it for that.
> Why does it ever make sense for $SUBSYSTEM_NQN_0 with $PORT_DRIVER_FOO
> to block operation of $SUBSYSTEM_NQN_1 with $PORT_DRIVER_BAR..?
Because it keeps the code simple. If you had actually participated
on our development list you might have seen that until not too long
ago we have very fine grainded locks here. In the end Armen convinced
me that it's easier to maintain if we don't bother with fine grained
locking outside the fast path, especially as it significantly simplifies
the discovery implementation. If if it ever turns out to be an
issue we can change it easily as the implementation is well encapsulated.