[SCSI] libfcoe: Allow FIP to be disabled by the driver
authorJoe Eykholt <jeykholt@cisco.com>
Tue, 3 Nov 2009 19:48:11 +0000 (11:48 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 4 Dec 2009 18:01:11 +0000 (12:01 -0600)
Allow FIP to be disabled by the driver for devices
that want to use libfcoe in non-FIP mode.

The driver merely sets the fcoe_ctlr mode to the state which
should be entered when the link comes up.  The default is auto.
No change is needed for fcoe.c which uses auto mode.

Signed-off-by: Joe Eykholt <jeykholt@cisco.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/fcoe/libfcoe.c
include/scsi/libfcoe.h

index 6b07a8400889ec538fc2814457b97d64524f455c..1ea17a3c87494cbeb0c8695a4732135cbb601b16 100644 (file)
@@ -109,6 +109,7 @@ static inline int fcoe_ctlr_fcf_usable(struct fcoe_fcf *fcf)
 void fcoe_ctlr_init(struct fcoe_ctlr *fip)
 {
        fip->state = FIP_ST_LINK_WAIT;
+       fip->mode = FIP_ST_AUTO;
        INIT_LIST_HEAD(&fip->fcfs);
        spin_lock_init(&fip->lock);
        fip->flogi_oxid = FC_XID_UNKNOWN;
@@ -261,11 +262,12 @@ void fcoe_ctlr_link_up(struct fcoe_ctlr *fip)
                spin_unlock_bh(&fip->lock);
                fc_linkup(fip->lp);
        } else if (fip->state == FIP_ST_LINK_WAIT) {
-               fip->state = FIP_ST_AUTO;
+               fip->state = fip->mode;
                fip->last_link = 1;
                fip->link = 1;
                spin_unlock_bh(&fip->lock);
-               LIBFCOE_FIP_DBG("%s", "setting AUTO mode.\n");
+               if (fip->state == FIP_ST_AUTO)
+                       LIBFCOE_FIP_DBG("%s", "setting AUTO mode.\n");
                fc_linkup(fip->lp);
                fcoe_ctlr_solicit(fip, NULL);
        } else
index 76d08c9a76783ba7591e9db2d74b213a52be1fc3..2344a00e92efbaae97444ce22e0e352f2af7eb4b 100644 (file)
@@ -55,6 +55,7 @@ enum fip_state {
 /**
  * struct fcoe_ctlr - FCoE Controller and FIP state
  * @state:        internal FIP state for network link and FIP or non-FIP mode.
+ * @mode:         LLD-selected mode.
  * @lp:                   &fc_lport: libfc local port.
  * @sel_fcf:      currently selected FCF, or NULL.
  * @fcfs:         list of discovered FCFs.
@@ -89,6 +90,7 @@ enum fip_state {
  */
 struct fcoe_ctlr {
        enum fip_state state;
+       enum fip_state mode;
        struct fc_lport *lp;
        struct fcoe_fcf *sel_fcf;
        struct list_head fcfs;