unsigned int temp_idx;
        int i;
        int j = 0;
-       unsigned long rem_nsec;
-       struct lpfc_vport **vports;
+       unsigned long rem_nsec, iflags;
+       bool log_verbose = false;
+       struct lpfc_vport *port_iterator;
 
        /* Don't dump messages if we explicitly set log_verbose for the
         * physical port or any vport.
        if (phba->cfg_log_verbose)
                return;
 
-       vports = lpfc_create_vport_work_array(phba);
-       if (vports != NULL) {
-               for (i = 0; i <= phba->max_vpi && vports[i] != NULL; i++) {
-                       if (vports[i]->cfg_log_verbose) {
-                               lpfc_destroy_vport_work_array(phba, vports);
+       spin_lock_irqsave(&phba->port_list_lock, iflags);
+       list_for_each_entry(port_iterator, &phba->port_list, listentry) {
+               if (port_iterator->load_flag & FC_UNLOADING)
+                       continue;
+               if (scsi_host_get(lpfc_shost_from_vport(port_iterator))) {
+                       if (port_iterator->cfg_log_verbose)
+                               log_verbose = true;
+
+                       scsi_host_put(lpfc_shost_from_vport(port_iterator));
+
+                       if (log_verbose) {
+                               spin_unlock_irqrestore(&phba->port_list_lock,
+                                                      iflags);
                                return;
                        }
                }
        }
-       lpfc_destroy_vport_work_array(phba, vports);
+       spin_unlock_irqrestore(&phba->port_list_lock, iflags);
 
        if (atomic_cmpxchg(&phba->dbg_log_dmping, 0, 1) != 0)
                return;