On Tue, Oct 09, 2012 at 03:18:50PM -0700, Robert Love wrote: > v4: > > @Neil: > Policy is now: > > 'mode' attribute: > input: "Fabric" "VN2VN" (case insensitive) > output: "Fabric" "VN2VN" > > 'enabled' attribute: > input: "1" "0" > output: "1" "0" > Thanks, for the series Acked-by: Neil Horman <nhorman@xxxxxxxxxxxxx> > @Mark: > Initial patch now optimizes enum-to-string memory usage and > string retreival > > -- > > v3: > > This series applies to the v3.6 kernel. > > @Bart: Fixed bus_create_file -> bus_attrs > Removed sscanf with non-NULL buffer, only checking for '1' or '0' now > Removed unnecessary whitespace change > > @Bhanu: Incorporated check in _bnx2fc_create (thanks for the code) > > Additional changes: Added check for 'enabled' in reset in fcoe.c > Made mode strncmp case insensitive so user can > # echo "vn2vn" > /sys/.../ctlr_0/mode # or > # echo "VN2VN" > /sys/.../ctlr_0/mode # or even > # echo "FaBRiC" > /sys/.../ctlr_0/mode > > -- > > v2: > > The following series adds /sys/bus/fcoe based control interfaces to > libfcoe. A fcoe_sysfs infrastructure was added to the kernel a few > cycles ago, this series builds on that work. The patches deprecate > the old create, vn2vn_create, destroy, enable and disable interfaces > that exist in /sys/module/libfcoe/parameters/. > > Another goal of this series is to change the initialization sequence for > a FCoE device. The result of this series is that interfaces created using > libfcoe.ko interfaces (i.e. fcoe.ko or bnx2fc.ko) will have the following > starting steps- > > 1) Create/alloc the FCoE Controller > - Allocate kernel memory and create per-instance sysfs devices > - The FCoE Controller is created disabled, no discovery or login > until it is enabled. > > # echo eth3.172-fcoe > /sys/bus/fcoe/ctlr_create > > 2) Configure the FCoE Controller > - Change mode, set ddp_min (future), set dcb_required (future), etc... > > # echo 2 > /sys/bus/fcoe/ctlr_0/mode #sets mode to VN2VN > > 3) Enable the FCoE Controller > - Begins discovery and login in 'Fabric' mode. or > - Begins FIP FCID claim process, discovery and login in 'VN2VN' mode > > 4) Destroy the FCoE Controller > - Logout and free all memory > > # echo eth3.172-fcoe > /sys/bus/fcoe/ctlr_destroy > > This series converts both fcoe.ko and bnx2fc.ko to use the new > fcoe_sysfs based interfaces. The legacy interfaces can remain in kernel > for a kernel cycle or two before being removed. > > I'm looking for feedback on the use of /sys/bus/fcoe/ctlr_create and > /sys/bus/fcoe/ctlr_destroy and that those interfaces take an ifname. > I modeled it after the bonding interface, but I'm not sure if that's > acceptible. > > Incorpoated v1 feedback: > > @Chris: > > I spent a lot of time looking into FCF selection. > > I implemented a POC series where I made the 'enabled' attribute > of a fcoe_fcf_device (i.e. /sys/bus/fcoe/devices/fcf_X) writable. The > fcoe_ctlr_device (i.e. /sys/bus/fcoe/devices/ctlr_X) has a > 'selection_strategy' attribute that would allow the user to toggle between > AUTO (current kernel selection algorithm) and USER (user writes to FCF's > 'selection' attribute). > > I also wrote a little libudev based application that listened for fcoe_fcf_device > sysfs add/remove events. My plan was to have fcoemon monitor the discovery > of FCFs and then have it write to the 'selected' attribute of the FCF the user > had chosen. > > Working on this series convinced me that any FCF selection needs further > consideration. First of all, it's fairly complicated to update the fcoe_ctlr.c > functional FIP code to handle FCF/fabric selection. Some questions that arise: > > What triggers FLOGI/LOGO? We would now have link, enabled/disabled, selection > strategy and FCF selection to consider. > > Can a new FCF be selected when one is already selected and an FLOGI has occurred? > Can a FCF be de-selected when the FLOGI has been sent? > > Maybe we can only change things when disabled, that probably makes the most sense.. > > When does discovery happen? When the ctlr is created (no opportunity for > mode/selection strategy to be set)? When the mode is changed (same problem)? > What about when the cltr is enabled (but that's when we were going to FLOGI)? > > This isn't a complete list of considerations, just what came to mind when writing > this. Anyway, the policies started to get complicated, or maybe my lack of policies > made the POC implementation more complicated. Either way it made me think about > use cases and how valuable FCF/fabric selection is. > > After further consideration I think that most of the access decisions, when > connecting to a FC fabric, should be done by the fabric services. I'm not sure > the endstations should be whitelisting or blacklisting FCFs or even making > decisions about which ones to use when they're already prioritized amongst themselves > (on the same fabric). I think it might be nice for debugging, but I don't have a > need at the moment. > > I think user selection may be more valuable with VN2VN, which may interest you > more anyway, as you said that you were running a VN2VN setup. Since there > aren't fabric services to rely on I can see it useful for VN_Ports to whitelist or > blacklist other VN_Ports. I think the first step to support something like this > would be to represent the fcoe_rports in fcoe_sysfs or in the FC Transport such > that they can be selected or de-slected. > > I think that's a fine goal, but with this series, I think I'd like to focus on > just getting away from using module parameters for control interfaces. I think > this current series allows for selection as I've described above since it will > now start the FCoE Controller in a DISABLED state such that configurations can > now be made before the FLOGI. > > @Bhanu > > I implemented the changes for bnx2fc and I think it should be mostly fine. I > wasn't able to test the code, so I'd appreciate any feedback about whether > there are bugs or not. > > @Bart: > > Fixed the 'const char *p' and cast issue in fcoe_parse_mode(). > > Now checking for string length and passing correctly NULL terminated string > to fcoe_parse_mode(). > > Thanks, //Rob > > --- > > v1 covermail > > The following series implements a move from using module parameters > as control interfaces to /sys/bus/fcoe based interfaces. A sysfs infrastructure > was added to the kernel a few cycles ago, this series builds on that work. > > It moves the create, vn2vn_create, destroy, enable and disable interfaces > from /sys/module/libfcoe/parameters/ to various places under /sys/bus/fcoe/. > These interfaces simply are not module configurations- they are control > interfaces. > > A second goal of this series is to change the initialization sequence for > a FCoE device. The result of this series is that interfaces created using > libfcoe.ko interfaces (i.e. fcoe.ko or bnx2fc.ko) will have the following > starting steps- > > 1) Create/alloc the port > - Allocate kernel memory and create per-instance sysfs devices > - No discovery or login > > 2) Configure the port > - Change mode, set ddp_min, etc... > > 3) Start the port > - Begins discovery and/or login (depending on mode) > > 4) Destroy the port > - Logout and free all memory > > I'm looking for feedback on using sysfs files as control interfaces that > the user (application) would write interface names to. I modeled this > series off of the bonding sysfs interface, but it was suggested to me that > it might not be a good example. I belive bonding uses two values per-file > a '+' or a '-" to add or delete and then the ifname apended. I am simply > writing the ifname to the ctlr_create or ctlr_destroy. > > Series compiled and tested against v3.5. libfcoe.ko compile warning fixed > upstream after v3.5, anyone who compiles this can ignore section mismatch > warning. Also note that a modified fcoemon is needed to use the fcoe system > service against this kernel modification. I'd be happy to provide that > fcoemon code on request. > > --- > > Robert Love (5): > libfcoe: Save some memory and optimize name lookups > libfcoe: Add fcoe_sysfs debug logging level > libfcoe, fcoe, bnx2fc: Add new fcoe control interface > fcoe: Use the fcoe_sysfs control interface > bnx2fc: Use the fcoe_sysfs control interface > > > Documentation/ABI/testing/sysfs-bus-fcoe | 42 +++++++ > drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 169 ++++++++++++++++++++++----- > drivers/scsi/fcoe/fcoe.c | 148 +++++++++++++++++++++--- > drivers/scsi/fcoe/fcoe_ctlr.c | 17 +-- > drivers/scsi/fcoe/fcoe_sysfs.c | 186 +++++++++++++++++++++++++----- > drivers/scsi/fcoe/fcoe_transport.c | 104 +++++++++++++++++ > drivers/scsi/fcoe/libfcoe.h | 11 +- > include/scsi/fcoe_sysfs.h | 11 ++ > include/scsi/libfcoe.h | 16 ++- > 9 files changed, 608 insertions(+), 96 deletions(-) > > -- > > Thanks, //Rob > _______________________________________________ > devel mailing list > devel@xxxxxxxxxxxxx > https://lists.open-fcoe.org/mailman/listinfo/devel > -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html