linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Robert Love <robert.w.love@intel.com>
To: Joe Eykholt <jeykholt@cisco.com>
Cc: "linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"james.smart@emulex.com" <james.smart@emulex.com>,
	"hare@suse.de" <hare@suse.de>,
	"christof.schmitt@de.ibm.com" <christof.schmitt@de.ibm.com>,
	"james.bottomley@suse.de" <james.bottomley@suse.de>
Subject: Re: [RFC PATCH 0/3] FC subsystem update
Date: Wed, 12 May 2010 17:41:10 -0700	[thread overview]
Message-ID: <1273711270.3543.89.camel@fritz> (raw)
In-Reply-To: <4BEB44A0.8070208@cisco.com>

On Wed, 2010-05-12 at 17:15 -0700, Joe Eykholt wrote:
> Robert Love wrote:
> > This series represents the continuation of the RFC archived here:
> > http://marc.info/?l=linux-scsi&m=126463466126962&w=2. The sysfs organization has
> > taken shape and object allocations make more sense than the previous RFC. The
> > patches have undergone my own developer testing, which has mostly focused on
> > NPIV port creation and deletion and some I/O.
> > 
> > This series creates a Fibre Channel subsystem that has an improved sysfs device
> > tree (the port's view of the fabric) and begins to abstract itself from SCSI.
> > 
> > This RFC is to solicit any feedback before I continue to refine these patches.
> > I've created two diagrams to help people understand the change. The first shows
> > the current sysfs device layout and the second shows the allocation scheme for
> > libfc and fcoe's primary data structures.
> > 
> > http://open-fcoe.org/rwlove/fc_sysfs.jpg
> > http://open-fcoe.org/rwlove/libfc_alloc.jpg
> > 
> > These patches apply to scsi-misc + the recently submitted fcoe patches, which
> > is the same as the fcoe-next tree on open-fcoe.org.
> > 
> > Overview of N_Port creation/login (for fcoe.ko):
> > 
> > 1) First, fc.ko is installed and then scsi_transport_fcp.ko is installed.
> >    scsi_transport_fcp.ko registers itself (SCSI initiator) as a FC4 with
> >    fc.ko.
> > 
> > 2) When a fcoe port is "created" from
> >    'echo ethX > /sys/module/fcoe/parameters/create' a fcport is allocated and
> >    added to sysfs. All of the port's physical properties are added as
> >    attributes.
> > 
> > <PCI root>/fcport_0
> > 
> > 3) At this point libfc/libfcoe/fcoe needs an lport and an fcoe_port. The lport
> >    and fcoe_ports are private data of a fcvport so a fcvport is allocated,
> >    but not added to sysfs.
> > 
> > 4) libfcoe.ko discovers FCFs and allocates/adds them as fcfabrics to sysfs
> >    as they are discovered.
> > 
> >    [ I think that we may want to revisit the idea of having a fcfport between
> >      the fcport and fcfabric. Right now I'm creating a fcfabric for each FCF
> >      that is discovered at the FIP phase, but that doesn't make much sense
> >      since multiple FCFs on the same fabric can be discovered. Adding a fcfport
> >      for each FCF discovered might be more correct. ]
> > 
> > <PCI root>/fcport_0/fcfabric_0
> > 
> > 5) libfc.ko will FLOGI into the fabric and upon the FLOGI ACC the fcvport
> >    will be added to sysfs.
> > 
> > <PCI root>/fcport_0/fcfabric_0/fcvport_0
> > 
> > 5.1) The FC layer will call fc4_init_add in the fc4_template. If SCSI
> >      is the FC4, fcp_init_add (scsi_transport_fcp) will be called. This
> >      routine calls scsi_host_alloc/scsi_add_host. There is also a callback
> >      down to the LLD so that it can setup any SCSI-FCP private data.
> > 
> >      [ I'm not sure how non-FCoE HBAs will do this. I imagine they will just
> >        create all three sysfs devices (fcport, fcfabric and fcvport) on the
> >        FLOGI ACC since they do not rely on a discovery protocol. ]
> > 
> > <PCI root>/fcport_0/fcfabric_0/fcvport_0/fcpinit_X/hostX
> > 
> > 6) libfc will start discovery and as remote ports are discovered libfc will
> >    notify FC to create and add fcrports to sysfs.
> > 
> > <PCI root>/fcport_0/fcfabric_0/fcvport_0/fcpinit_X/hostX
> > 					/fcrport_0
> > 
> > 6.1) When the fcrports are created the FC layer will call fc4_targ_add in
> >      the fc4_template. If SCSI is the FC4, fcp_targ_add (scsi_transport_fcp)
> >      will be called. This routine will allocate a fcptarg device, add it to
> >      sysfs and notify SCSI to scan it.
> > 
> > <PCI root>/fcport_0/fcfabric_0/fcvport_0/fcpinit_X/hostX
> > 					/fcrport_0/fcptargX:0-0
> > 
> > 
> > The current series shortcomings are:
> > 
> > 1) The FC4 interface needs work to become more FC4 agnostic.
> >    (end of include/fc/fc.h)
> > 
> > 2) Point-to-Point mode needs to be addressed
> > 
> > 3) BSG needs to be tested and STGT should become another FC4 that is
> >    registered with FC. Since libfc/fcoe doesn't plug into STGT yet this
> >    will be a challenge.
> > 
> > 4) user space updates - For the fcoe-utils package, libhbalinux (user
> >    space HBA API library) needs to be updated to read the new layout before
> >    heavy testing of the new layout can be done.
> > 
> > 5) Miscellaneous problems like error handling, fcfabric deletion cleaning
> >    up vports, using attribute containers / scsi transport style for
> >    SCSI-FCP devices, warnings, etc...
> > 
> > 6) FCoE attributes...
> > 
> > Other thoughts:
> > 
> > I would love to collaborate with someone who maintains a HBA that supports
> > native FC since I'm not aware of the specific needs of traditional HBAs.
> > 
> > I would hope that this new layout could be added to the kernel (when
> > ready) and the existing FC Transport deprecated as I'm not sure how to get
> > all HBA maintainers to switch their drivers at the same time. I think that
> > only adding FCoE attributes to this layout would be an incentive to get LLDs
> > to migrate.
> > 
> > I've tried to keep this covermail brief, so there are plenty of details
> > left out. Please ask if you have a question.
> > 
> > Thanks, //Rob
> 
> <snip>
> 
> Hi Rob,
> 
Hi Joe, thanks for taking a look.

> I'm running the patches and they work OK (very lightly used).
> 
> I'd prefer we kept the naming in /sys/class shorter and keep underscores
> after "fc" like we currently have in fc_remote_port.  Maybe you could
> continue to use the existing names where they apply, after getting the
> other transport code converted.
> 
> Here are my suggested name changes:
> 
> 	fcvport becomes fc_vport
> 	fcvport/fcvport_0 becomes fc_vport/0
> 	fcpinit_4 becomes fcp_init4
> 	fcptarg-X:0-1 becomes fcp_targ/1
> 	fcrport:xxx-0 becomes fc_rport/0 (or fc_remote_ports/xxx eventually)
> 	fcfabric/fcfabric_0 becomes fc_fabric/0
> 	fcport/fcport_0 becomes fc_port/0
> 
Sure, that sounds reasonable. I think I've got too much fc_fc* stuff in
general- device names, function names, etc...

> When we have local FCP target ports (as opposed to remote ones) how will we
> represent that?  You could include that in the diagram.
> 
This is something that I've got to figure out so that I don't lose any
existing functionality. I need a way to test whatever scheme is agreed
upon and since stgt isn't integrated with libfc/fcoe I'll either need to
integrate it or use one of the out-of-tree target infrastructures to
create local target ports.

> When we see remote initiators, how do we show them?  Maybe we just don't
> create anything under fcport_N in that case.
> 
The FC layer could create an fc_rport and notify the registered FC4. I
haven't really thought out if the SCSI-FCP layer would do anything
though.

Another related question is if a discovered target is represented by the
same device/structure when the host is an initiator or target. The same
question applies to discovered initiators.

> I may have more comments later after I look through the code
> a bit further.  I'm modifying fcc to handle the new trees.
> 
Very cool. Let me know when you have it done as I'd love to use it for
testing.

> Minor issues:  I noticed that fnic no longer compiles and checkpatch
> spots some issues, but I'm sure those will be fixed later.

Yeah, sorry about fnic. :)

I tried to clean up a lot of the checkpatch warnings, many were the
result of code moved from scsi_transport_fc, so I tried to clean up all
of the issues that I introduced and some of the existing ones. I'll
clean up all that stuff once this code matures.



  reply	other threads:[~2010-05-13  0:41 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-12 20:20 [RFC PATCH 0/3] FC subsystem update Robert Love
2010-05-12 20:20 ` [RFC PATCH 1/3] fc: Create FC sybsystem Robert Love
2010-05-12 20:20 ` [RFC PATCH 2/3] scsi_transport_fcp: Create FC/SCSI interaction layer Robert Love
2010-05-12 20:20 ` [RFC PATCH 3/3] libfc, libfcoe, fcoe: Make use of FC subsystem Robert Love
2010-05-13  0:15 ` [RFC PATCH 0/3] FC subsystem update Joe Eykholt
2010-05-13  0:41   ` Robert Love [this message]
2010-05-13  0:55     ` Joe Eykholt
2010-05-13  2:41       ` Nicholas A. Bellinger

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=1273711270.3543.89.camel@fritz \
    --to=robert.w.love@intel.com \
    --cc=christof.schmitt@de.ibm.com \
    --cc=hare@suse.de \
    --cc=james.bottomley@suse.de \
    --cc=james.smart@emulex.com \
    --cc=jeykholt@cisco.com \
    --cc=linux-scsi@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).