[SCSI] zfcp: Redesign of the debug tracing for HBA records.
[pandora-kernel.git] / drivers / s390 / scsi / zfcp_fsf.c
index be03174..9881ba9 100644 (file)
@@ -211,13 +211,13 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
        struct fsf_status_read_buffer *sr_buf = req->data;
 
        if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
-               zfcp_dbf_hba_fsf_unsol("dism", adapter->dbf, sr_buf);
+               zfcp_dbf_hba_fsf_uss("fssrh_1", req);
                mempool_free(sr_buf, adapter->pool.status_read_data);
                zfcp_fsf_req_free(req);
                return;
        }
 
-       zfcp_dbf_hba_fsf_unsol("read", adapter->dbf, sr_buf);
+       zfcp_dbf_hba_fsf_uss("fssrh_2", req);
 
        switch (sr_buf->status_type) {
        case FSF_STATUS_READ_PORT_CLOSED:
@@ -232,7 +232,7 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
                dev_warn(&adapter->ccw_device->dev,
                         "The error threshold for checksum statistics "
                         "has been exceeded\n");
-               zfcp_dbf_hba_berr(adapter->dbf, req);
+               zfcp_dbf_hba_bit_err("fssrh_3", req);
                break;
        case FSF_STATUS_READ_LINK_DOWN:
                zfcp_fsf_status_read_link_down(req);
@@ -754,10 +754,11 @@ int zfcp_fsf_status_read(struct zfcp_qdio *qdio)
        goto out;
 
 failed_req_send:
+       req->data = NULL;
        mempool_free(sr_buf, adapter->pool.status_read_data);
 failed_buf:
+       zfcp_dbf_hba_fsf_uss("fssr__1", req);
        zfcp_fsf_req_free(req);
-       zfcp_dbf_hba_fsf_unsol("fail", adapter->dbf, NULL);
 out:
        spin_unlock_irq(&qdio->req_q_lock);
        return retval;
@@ -851,7 +852,7 @@ struct zfcp_fsf_req *zfcp_fsf_abort_fcp_cmnd(struct scsi_cmnd *scmnd)
 
        zfcp_qdio_set_sbale_last(qdio, &req->qdio_req);
 
-       req->data = zfcp_sdev;
+       req->data = sdev;
        req->handler = zfcp_fsf_abort_fcp_command_handler;
        req->qtcb->header.lun_handle = zfcp_sdev->lun_handle;
        req->qtcb->header.port_handle = zfcp_sdev->port->handle;
@@ -882,7 +883,7 @@ static void zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *req)
 
        switch (header->fsf_status) {
         case FSF_GOOD:
-               zfcp_dbf_san_ct_response(req);
+               zfcp_dbf_san_res("fsscth1", req);
                ct->status = 0;
                break;
         case FSF_SERVICE_CLASS_NOT_SUPPORTED:
@@ -1025,7 +1026,7 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,
        req->qtcb->header.port_handle = wka_port->handle;
        req->data = ct;
 
-       zfcp_dbf_san_ct_request(req, wka_port->d_id);
+       zfcp_dbf_san_req("fssct_1", req, wka_port->d_id);
 
        ret = zfcp_fsf_req_send(req);
        if (ret)
@@ -1053,7 +1054,7 @@ static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
 
        switch (header->fsf_status) {
        case FSF_GOOD:
-               zfcp_dbf_san_els_response(req);
+               zfcp_dbf_san_res("fsselh1", req);
                send_els->status = 0;
                break;
        case FSF_SERVICE_CLASS_NOT_SUPPORTED:
@@ -1127,7 +1128,7 @@ int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,
        req->handler = zfcp_fsf_send_els_handler;
        req->data = els;
 
-       zfcp_dbf_san_els_request(req);
+       zfcp_dbf_san_req("fssels1", req, d_id);
 
        ret = zfcp_fsf_req_send(req);
        if (ret)
@@ -2069,8 +2070,6 @@ static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req)
        struct fcp_resp_with_ext *fcp_rsp;
        unsigned long flags;
 
-       zfcp_fsf_fcp_handler_common(req);
-
        read_lock_irqsave(&req->adapter->abort_lock, flags);
 
        scpnt = req->data;
@@ -2079,6 +2078,8 @@ static void zfcp_fsf_fcp_cmnd_handler(struct zfcp_fsf_req *req)
                return;
        }
 
+       zfcp_fsf_fcp_handler_common(req);
+
        if (unlikely(req->status & ZFCP_STATUS_FSFREQ_ERROR)) {
                set_host_byte(scpnt, DID_TRANSPORT_DISRUPTED);
                goto skip_fsfstatus;
@@ -2170,12 +2171,13 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *scsi_cmnd)
        struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
        struct zfcp_qdio *qdio = adapter->qdio;
        struct fsf_qtcb_bottom_io *io;
+       unsigned long flags;
 
        if (unlikely(!(atomic_read(&zfcp_sdev->status) &
                       ZFCP_STATUS_COMMON_UNBLOCKED)))
                return -EBUSY;
 
-       spin_lock(&qdio->req_q_lock);
+       spin_lock_irqsave(&qdio->req_q_lock, flags);
        if (atomic_read(&qdio->req_q_free) <= 0) {
                atomic_inc(&qdio->req_q_full);
                goto out;
@@ -2239,7 +2241,7 @@ failed_scsi_cmnd:
        zfcp_fsf_req_free(req);
        scsi_cmnd->host_scribble = NULL;
 out:
-       spin_unlock(&qdio->req_q_lock);
+       spin_unlock_irqrestore(&qdio->req_q_lock, flags);
        return retval;
 }
 
@@ -2419,3 +2421,12 @@ void zfcp_fsf_reqid_check(struct zfcp_qdio *qdio, int sbal_idx)
                        break;
        }
 }
+
+struct zfcp_fsf_req *zfcp_fsf_get_req(struct zfcp_qdio *qdio,
+                                     struct qdio_buffer *sbal)
+{
+       struct qdio_buffer_element *sbale = &sbal->element[0];
+       u64 req_id = (unsigned long) sbale->addr;
+
+       return zfcp_reqlist_find(qdio->adapter->req_list, req_id);
+}