struct ddb_entry *ddb_entry = session->dd_data;
        struct scsi_qla_host *ha = ddb_entry->ha;
 
-       DEBUG2(printk("scsi%ld: %s: index [%d] port down retry count of (%d) "
-                     "secs exhausted, marking device DEAD.\n", ha->host_no,
-                     __func__, ddb_entry->fw_ddb_index,
-                     ha->port_down_retry_count));
+       if (atomic_read(&ddb_entry->state) != DDB_STATE_ONLINE) {
+               atomic_set(&ddb_entry->state, DDB_STATE_DEAD);
 
-       atomic_set(&ddb_entry->state, DDB_STATE_DEAD);
+               DEBUG2(printk("scsi%ld: %s: index [%d] port down retry count "
+                             "of (%d) secs exhausted, marking device DEAD.\n",
+                             ha->host_no, __func__, ddb_entry->fw_ddb_index,
+                             ha->port_down_retry_count));
 
-       DEBUG2(printk("scsi%ld: %s: scheduling dpc routine - dpc flags = "
-                     "0x%lx\n", ha->host_no, __func__, ha->dpc_flags));
-       queue_work(ha->dpc_thread, &ha->dpc_work);
+               DEBUG2(printk("scsi%ld: %s: scheduling dpc routine - dpc "
+                             "flags = 0x%lx\n",
+                             ha->host_no, __func__, ha->dpc_flags));
+               queue_work(ha->dpc_thread, &ha->dpc_work);
+       }
 }
 
 static int qla4xxx_host_get_param(struct Scsi_Host *shost,