* zfcp_rec_dbf_event_thread - trace event related to recovery thread operation
  * @id2: identifier for event
  * @adapter: adapter
- * @lock: non-zero value indicates that erp_lock has not yet been acquired
+ * This function assumes that the caller is holding erp_lock.
  */
-void zfcp_rec_dbf_event_thread(u8 id2, struct zfcp_adapter *adapter, int lock)
+void zfcp_rec_dbf_event_thread(u8 id2, struct zfcp_adapter *adapter)
 {
        struct zfcp_rec_dbf_record *r = &adapter->rec_dbf_buf;
        unsigned long flags = 0;
        struct list_head *entry;
        unsigned ready = 0, running = 0, total;
 
-       if (lock)
-               read_lock_irqsave(&adapter->erp_lock, flags);
        list_for_each(entry, &adapter->erp_ready_head)
                ready++;
        list_for_each(entry, &adapter->erp_running_head)
                running++;
        total = adapter->erp_total_count;
-       if (lock)
-               read_unlock_irqrestore(&adapter->erp_lock, flags);
 
        spin_lock_irqsave(&adapter->rec_dbf_lock, flags);
        memset(r, 0, sizeof(*r));
        spin_unlock_irqrestore(&adapter->rec_dbf_lock, flags);
 }
 
+/**
+ * zfcp_rec_dbf_event_thread - trace event related to recovery thread operation
+ * @id2: identifier for event
+ * @adapter: adapter
+ * This function assumes that the caller does not hold erp_lock.
+ */
+void zfcp_rec_dbf_event_thread_lock(u8 id2, struct zfcp_adapter *adapter)
+{
+       unsigned long flags;
+
+       read_lock_irqsave(&adapter->erp_lock, flags);
+       zfcp_rec_dbf_event_thread(id2, adapter);
+       read_unlock_irqrestore(&adapter->erp_lock, flags);
+}
+
 static void zfcp_rec_dbf_event_target(u8 id2, void *ref,
                                      struct zfcp_adapter *adapter,
                                      atomic_t *status, atomic_t *erp_count,
 
 
        zfcp_erp_action_to_ready(erp_action);
        up(&adapter->erp_ready_sem);
-       zfcp_rec_dbf_event_thread(2, adapter, 0);
+       zfcp_rec_dbf_event_thread(2, adapter);
 }
 
 /*
 
        atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL, &adapter->status);
        up(&adapter->erp_ready_sem);
-       zfcp_rec_dbf_event_thread(2, adapter, 1);
+       zfcp_rec_dbf_event_thread_lock(2, adapter);
 
        wait_event(adapter->erp_thread_wqh,
                   !atomic_test_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_UP,
                 * no action in 'ready' queue to be processed and
                 * thread is not to be killed
                 */
-               zfcp_rec_dbf_event_thread(4, adapter, 1);
+               zfcp_rec_dbf_event_thread_lock(4, adapter);
                down_interruptible(&adapter->erp_ready_sem);
-               zfcp_rec_dbf_event_thread(5, adapter, 1);
+               zfcp_rec_dbf_event_thread_lock(5, adapter);
        }
 
        atomic_clear_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_UP, &adapter->status);
                 * _must_ be the one belonging to the 'exchange config
                 * data' request.
                 */
-               zfcp_rec_dbf_event_thread(6, adapter, 1);
+               zfcp_rec_dbf_event_thread_lock(6, adapter);
                down(&adapter->erp_ready_sem);
-               zfcp_rec_dbf_event_thread(7, adapter, 1);
+               zfcp_rec_dbf_event_thread_lock(7, adapter);
                if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
                        ZFCP_LOG_INFO("error: exchange of configuration data "
                                      "for adapter %s timed out\n",
        }
 
        ret = ZFCP_ERP_SUCCEEDED;
-       zfcp_rec_dbf_event_thread(8, adapter, 1);
+       zfcp_rec_dbf_event_thread_lock(8, adapter);
        down(&adapter->erp_ready_sem);
-       zfcp_rec_dbf_event_thread(9, adapter, 1);
+       zfcp_rec_dbf_event_thread_lock(9, adapter);
        if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
                ZFCP_LOG_INFO("error: exchange port data timed out (adapter "
                              "%s)\n", zfcp_get_busid_by_adapter(adapter));
        /* finally put it into 'ready' queue and kick erp thread */
        list_add_tail(&erp_action->list, &adapter->erp_ready_head);
        up(&adapter->erp_ready_sem);
-       zfcp_rec_dbf_event_thread(1, adapter, 0);
+       zfcp_rec_dbf_event_thread(1, adapter);
        retval = 0;
  out:
        zfcp_rec_dbf_event_trigger(id, ref, want, need, erp_action,
 
 extern void zfcp_erp_unit_access_changed(struct zfcp_unit *, u8, void *);
 
 /******************************** AUX ****************************************/
-extern void zfcp_rec_dbf_event_thread(u8 id, struct zfcp_adapter *adapter,
-                                     int lock);
+extern void zfcp_rec_dbf_event_thread(u8 id, struct zfcp_adapter *adapter);
+extern void zfcp_rec_dbf_event_thread_lock(u8 id, struct zfcp_adapter *adapter);
 extern void zfcp_rec_dbf_event_adapter(u8 id, void *ref, struct zfcp_adapter *);
 extern void zfcp_rec_dbf_event_port(u8 id, void *ref, struct zfcp_port *port);
 extern void zfcp_rec_dbf_event_unit(u8 id, void *ref, struct zfcp_unit *unit);