LEAVE;
 }
 
-static const struct {
-       enum ibmvfc_async_event ae;
-       const char *desc;
-} ae_desc [] = {
-       { IBMVFC_AE_ELS_PLOGI,          "PLOGI" },
-       { IBMVFC_AE_ELS_LOGO,           "LOGO" },
-       { IBMVFC_AE_ELS_PRLO,           "PRLO" },
-       { IBMVFC_AE_SCN_NPORT,          "N-Port SCN" },
-       { IBMVFC_AE_SCN_GROUP,          "Group SCN" },
-       { IBMVFC_AE_SCN_DOMAIN,         "Domain SCN" },
-       { IBMVFC_AE_SCN_FABRIC,         "Fabric SCN" },
-       { IBMVFC_AE_LINK_UP,            "Link Up" },
-       { IBMVFC_AE_LINK_DOWN,          "Link Down" },
-       { IBMVFC_AE_LINK_DEAD,          "Link Dead" },
-       { IBMVFC_AE_HALT,                       "Halt" },
-       { IBMVFC_AE_RESUME,             "Resume" },
-       { IBMVFC_AE_ADAPTER_FAILED,     "Adapter Failed" },
+static const struct ibmvfc_async_desc ae_desc [] = {
+       { IBMVFC_AE_ELS_PLOGI,          "PLOGI",                IBMVFC_DEFAULT_LOG_LEVEL + 1 },
+       { IBMVFC_AE_ELS_LOGO,           "LOGO",         IBMVFC_DEFAULT_LOG_LEVEL + 1 },
+       { IBMVFC_AE_ELS_PRLO,           "PRLO",         IBMVFC_DEFAULT_LOG_LEVEL + 1 },
+       { IBMVFC_AE_SCN_NPORT,          "N-Port SCN",   IBMVFC_DEFAULT_LOG_LEVEL + 1 },
+       { IBMVFC_AE_SCN_GROUP,          "Group SCN",    IBMVFC_DEFAULT_LOG_LEVEL + 1 },
+       { IBMVFC_AE_SCN_DOMAIN,         "Domain SCN",   IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_SCN_FABRIC,         "Fabric SCN",   IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_LINK_UP,            "Link Up",              IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_LINK_DOWN,          "Link Down",    IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_LINK_DEAD,          "Link Dead",    IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_HALT,                       "Halt",         IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_RESUME,             "Resume",               IBMVFC_DEFAULT_LOG_LEVEL },
+       { IBMVFC_AE_ADAPTER_FAILED,     "Adapter Failed",       IBMVFC_DEFAULT_LOG_LEVEL },
 };
 
-static const char *unknown_ae = "Unknown async";
+static const struct ibmvfc_async_desc unknown_ae = {
+       0, "Unknown async", IBMVFC_DEFAULT_LOG_LEVEL
+};
 
 /**
  * ibmvfc_get_ae_desc - Get text description for async event
  * @ae:        async event
  *
  **/
-static const char *ibmvfc_get_ae_desc(u64 ae)
+static const struct ibmvfc_async_desc *ibmvfc_get_ae_desc(u64 ae)
 {
        int i;
 
        for (i = 0; i < ARRAY_SIZE(ae_desc); i++)
                if (ae_desc[i].ae == ae)
-                       return ae_desc[i].desc;
+                       return &ae_desc[i];
+
+       return &unknown_ae;
+}
+
+static const struct {
+       enum ibmvfc_ae_link_state state;
+       const char *desc;
+} link_desc [] = {
+       { IBMVFC_AE_LS_LINK_UP,         " link up" },
+       { IBMVFC_AE_LS_LINK_BOUNCED,    " link bounced" },
+       { IBMVFC_AE_LS_LINK_DOWN,       " link down" },
+       { IBMVFC_AE_LS_LINK_DEAD,       " link dead" },
+};
+
+/**
+ * ibmvfc_get_link_state - Get text description for link state
+ * @state:     link state
+ *
+ **/
+static const char *ibmvfc_get_link_state(enum ibmvfc_ae_link_state state)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(link_desc); i++)
+               if (link_desc[i].state == state)
+                       return link_desc[i].desc;
 
-       return unknown_ae;
+       return "";
 }
 
 /**
 static void ibmvfc_handle_async(struct ibmvfc_async_crq *crq,
                                struct ibmvfc_host *vhost)
 {
-       const char *desc = ibmvfc_get_ae_desc(crq->event);
+       const struct ibmvfc_async_desc *desc = ibmvfc_get_ae_desc(crq->event);
        struct ibmvfc_target *tgt;
 
-       ibmvfc_log(vhost, 3, "%s event received. scsi_id: %llx, wwpn: %llx,"
-                  " node_name: %llx\n", desc, crq->scsi_id, crq->wwpn, crq->node_name);
+       ibmvfc_log(vhost, desc->log_level, "%s event received. scsi_id: %llx, wwpn: %llx,"
+                  " node_name: %llx%s\n", desc->desc, crq->scsi_id, crq->wwpn, crq->node_name,
+                  ibmvfc_get_link_state(crq->link_state));
 
        switch (crq->event) {
        case IBMVFC_AE_RESUME: