]> xenbits.xensource.com Git - people/royger/freebsd.git/commitdiff
ocs_fc: Ignore flogi failure when the discovery is already done.
authorRam Kishore Vegesna <ram@FreeBSD.org>
Thu, 3 Mar 2022 11:44:03 +0000 (17:14 +0530)
committerRam Kishore Vegesna <ram@FreeBSD.org>
Mon, 7 Mar 2022 10:54:27 +0000 (16:24 +0530)
Summary:
Some targets are not responding to the FLOGI in point-to-point topology,
If the pt2pt discovery is done, Ignore the FLOGI failure.

MFC after: 3 days

Differential Revision: https://reviews.freebsd.org/D34422

(cherry picked from commit 79c56c9af583b4c6e079594b7b6ff8176e6bff7d)

sys/dev/ocs_fc/ocs_fabric.c

index 4a5d6820fcb6c0c5e7e66880b17b322222ec516a..70b240f5de1357cc7cea666ed4d44e7153488104 100644 (file)
@@ -228,10 +228,22 @@ __ocs_fabric_flogi_wait_rsp(ocs_sm_ctx_t *ctx, ocs_sm_event_t evt, void *arg)
                if (node_check_els_req(ctx, evt, arg, FC_ELS_CMD_FLOGI, __ocs_fabric_common, __func__)) {
                        return NULL;
                }
-               node_printf(node, "FLOGI failed evt=%s, shutting down sport [%s]\n", ocs_sm_event_name(evt),
-                       sport->display_name);
                ocs_assert(node->els_req_cnt, NULL);
                node->els_req_cnt--;
+               if (node->sport->domain->attached) {
+                       node_printf(node, "FLOGI failed, Domain already attached\n");
+                       if (node->sport->p2p_winner) {
+                               node_printf(node, "p2p winner, domain already attached\n");
+                               ocs_node_post_event(node, OCS_EVT_DOMAIN_ATTACH_OK, NULL);
+                       } else {
+                               node_printf(node, "peer p2p winner, shutdown node\n");
+                               node->shutdown_reason = OCS_NODE_SHUTDOWN_DEFAULT;
+                               ocs_fabric_initiate_shutdown(node);
+                       }
+                       break;
+               }
+               node_printf(node, "FLOGI failed evt=%s, shutting down sport [%s]\n", ocs_sm_event_name(evt),
+                       sport->display_name);
                ocs_sm_post_event(&sport->sm, OCS_EVT_SHUTDOWN, NULL);
                break;
        }