diff options
author | Kevin Yu <Kevin.Yu@Sun.COM> | 2009-12-03 11:04:52 +0800 |
---|---|---|
committer | Kevin Yu <Kevin.Yu@Sun.COM> | 2009-12-03 11:04:52 +0800 |
commit | 87dcbdbdce8044d5199e015edd8fb347d16ee0b5 (patch) | |
tree | f73d6bbe054167e42026257fe619c7f7b37c5dd1 /usr/src | |
parent | 3ccb19668faa3e1b7734ae03b4d31a4c00da3240 (diff) | |
download | illumos-joyent-87dcbdbdce8044d5199e015edd8fb347d16ee0b5.tar.gz |
6902058 Panic found while running 'fcadm create-fcoe-port -t nxge1'
6905824 fcoet should register port_fca_version to fct via fct_register_local_port
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/io/comstar/port/fcoet/fcoet.c | 1 | ||||
-rw-r--r-- | usr/src/uts/common/io/comstar/port/fcoet/fcoet.h | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/fcoe/fcoe.c | 27 |
3 files changed, 26 insertions, 4 deletions
diff --git a/usr/src/uts/common/io/comstar/port/fcoet/fcoet.c b/usr/src/uts/common/io/comstar/port/fcoet/fcoet.c index 6271f35b86..60362ef123 100644 --- a/usr/src/uts/common/io/comstar/port/fcoet/fcoet.c +++ b/usr/src/uts/common/io/comstar/port/fcoet/fcoet.c @@ -548,6 +548,7 @@ fcoet_attach_init(fcoet_soft_state_t *ss) * port_fct_private and port_lport have been initialized by fct_alloc */ port->port_fca_private = ss; + port->port_fca_version = FCT_FCA_MODREV_1; bcopy(ss->ss_eport->eport_nodewwn, port->port_nwwn, 8); bcopy(ss->ss_eport->eport_portwwn, port->port_pwwn, 8); port->port_default_alias = ss->ss_alias; diff --git a/usr/src/uts/common/io/comstar/port/fcoet/fcoet.h b/usr/src/uts/common/io/comstar/port/fcoet/fcoet.h index d1bf7db1ff..b5e5154583 100644 --- a/usr/src/uts/common/io/comstar/port/fcoet/fcoet.h +++ b/usr/src/uts/common/io/comstar/port/fcoet/fcoet.h @@ -33,7 +33,7 @@ extern "C" { #ifdef _KERNEL -#define FCOET_VERSION "v20090729-1.01" +#define FCOET_VERSION "v20091123-1.02" #define FCOET_NAME "COMSTAR FCoET " #define FCOET_MOD_NAME FCOET_NAME FCOET_VERSION diff --git a/usr/src/uts/common/io/fcoe/fcoe.c b/usr/src/uts/common/io/fcoe/fcoe.c index f4cc784350..5c58dfb01c 100644 --- a/usr/src/uts/common/io/fcoe/fcoe.c +++ b/usr/src/uts/common/io/fcoe/fcoe.c @@ -123,6 +123,7 @@ static void fcoe_worker_init(); static int fcoe_worker_fini(); static void fcoe_worker_frame(); static int fcoe_get_port_list(fcoe_port_instance_t *ports, int count); +static boolean_t fcoe_mac_existed(fcoe_mac_t *pmac); /* * Driver identificaton stuff @@ -195,7 +196,7 @@ static struct dev_ops fcoe_ops = { ddi_quiesce_not_needed }; -#define FCOE_VERSION "20090729-1.01" +#define FCOE_VERSION "20091123-1.02" #define FCOE_NAME "FCoE Transport v" FCOE_VERSION #define TASKQ_NAME_LEN 32 @@ -748,8 +749,10 @@ fcoe_iocmd(fcoe_soft_state_t *ss, intptr_t data, int mode) fcoe_mac, (param->fcp_port_type == FCOE_CLIENT_TARGET)); if (ret != 0) { - (void) fcoe_close_mac(fcoe_mac); - fcoe_destroy_mac(fcoe_mac); + if (fcoe_mac_existed(fcoe_mac) == B_TRUE) { + (void) fcoe_close_mac(fcoe_mac); + fcoe_destroy_mac(fcoe_mac); + } fcoeio->fcoeio_status = FCOEIOE_CREATE_PORT; ret = EIO; } @@ -951,6 +954,24 @@ fcoe_lookup_mac_by_id(datalink_id_t linkid) } /* + * Return B_TRUE if mac exists, or else return B_FALSE + */ +static boolean_t +fcoe_mac_existed(fcoe_mac_t *pmac) +{ + fcoe_mac_t *mac = NULL; + + ASSERT(MUTEX_HELD(&fcoe_global_ss->ss_ioctl_mutex)); + for (mac = list_head(&fcoe_global_ss->ss_mac_list); mac; + mac = list_next(&fcoe_global_ss->ss_mac_list, mac)) { + if (mac == pmac) { + return (B_TRUE); + } + } + return (B_FALSE); +} + +/* * port wwn will start with 20:..., node wwn will start with 10:... */ static void |