[SCSI] zfcp: Update dbf calls

Change the dbf data and functions to use the zfcp_dbf prefix
throughout the code. Also change the calls to dbf to use zfcp_dbf
instead of zfcp_adapter.

Signed-off-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
Swen Schillig 2009-08-18 15:43:21 +02:00 committed by James Bottomley
parent 799b76d09a
commit 5771710bd5
9 changed files with 347 additions and 380 deletions

View File

@ -517,6 +517,7 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
goto qdio_mem_failed; goto qdio_mem_failed;
adapter->qdio->adapter = adapter; adapter->qdio->adapter = adapter;
ccw_device->handler = NULL; ccw_device->handler = NULL;
adapter->ccw_device = ccw_device; adapter->ccw_device = ccw_device;
atomic_set(&adapter->refcount, 0); atomic_set(&adapter->refcount, 0);
@ -530,7 +531,7 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
if (zfcp_reqlist_alloc(adapter)) if (zfcp_reqlist_alloc(adapter))
goto failed_low_mem_buffers; goto failed_low_mem_buffers;
if (zfcp_adapter_debug_register(adapter)) if (zfcp_dbf_adapter_register(adapter))
goto debug_register_failed; goto debug_register_failed;
if (zfcp_setup_adapter_work_queue(adapter)) if (zfcp_setup_adapter_work_queue(adapter))
@ -577,7 +578,7 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
sysfs_failed: sysfs_failed:
zfcp_destroy_adapter_work_queue(adapter); zfcp_destroy_adapter_work_queue(adapter);
work_queue_failed: work_queue_failed:
zfcp_adapter_debug_unregister(adapter); zfcp_dbf_adapter_unregister(adapter->dbf);
debug_register_failed: debug_register_failed:
dev_set_drvdata(&ccw_device->dev, NULL); dev_set_drvdata(&ccw_device->dev, NULL);
kfree(adapter->req_list); kfree(adapter->req_list);
@ -616,7 +617,7 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
return; return;
zfcp_destroy_adapter_work_queue(adapter); zfcp_destroy_adapter_work_queue(adapter);
zfcp_adapter_debug_unregister(adapter); zfcp_dbf_adapter_unregister(adapter->dbf);
zfcp_qdio_free(adapter->qdio); zfcp_qdio_free(adapter->qdio);
zfcp_free_low_mem_buffers(adapter); zfcp_free_low_mem_buffers(adapter);
kfree(adapter->req_list); kfree(adapter->req_list);

View File

@ -120,9 +120,9 @@ static int zfcp_dbf_view_header(debug_info_t *id, struct debug_view *view,
return p - out_buf; return p - out_buf;
} }
void _zfcp_hba_dbf_event_fsf_response(const char *tag2, int level, void _zfcp_dbf_hba_fsf_response(const char *tag2, int level,
struct zfcp_fsf_req *fsf_req, struct zfcp_fsf_req *fsf_req,
struct zfcp_dbf *dbf) struct zfcp_dbf *dbf)
{ {
struct fsf_qtcb *qtcb = fsf_req->qtcb; struct fsf_qtcb *qtcb = fsf_req->qtcb;
union fsf_prot_status_qual *prot_status_qual = union fsf_prot_status_qual *prot_status_qual =
@ -132,11 +132,11 @@ void _zfcp_hba_dbf_event_fsf_response(const char *tag2, int level,
struct zfcp_port *port; struct zfcp_port *port;
struct zfcp_unit *unit; struct zfcp_unit *unit;
struct zfcp_send_els *send_els; struct zfcp_send_els *send_els;
struct zfcp_hba_dbf_record *rec = &dbf->hba_dbf_buf; struct zfcp_dbf_hba_record *rec = &dbf->hba_buf;
struct zfcp_hba_dbf_record_response *response = &rec->u.response; struct zfcp_dbf_hba_record_response *response = &rec->u.response;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->hba_dbf_lock, flags); spin_lock_irqsave(&dbf->hba_lock, flags);
memset(rec, 0, sizeof(*rec)); memset(rec, 0, sizeof(*rec));
strncpy(rec->tag, "resp", ZFCP_DBF_TAG_SIZE); strncpy(rec->tag, "resp", ZFCP_DBF_TAG_SIZE);
strncpy(rec->tag2, tag2, ZFCP_DBF_TAG_SIZE); strncpy(rec->tag2, tag2, ZFCP_DBF_TAG_SIZE);
@ -203,7 +203,7 @@ void _zfcp_hba_dbf_event_fsf_response(const char *tag2, int level,
break; break;
} }
debug_event(dbf->hba_dbf, level, rec, sizeof(*rec)); debug_event(dbf->hba, level, rec, sizeof(*rec));
/* have fcp channel microcode fixed to use as little as possible */ /* have fcp channel microcode fixed to use as little as possible */
if (fsf_req->fsf_command != FSF_QTCB_FCP_CMND) { if (fsf_req->fsf_command != FSF_QTCB_FCP_CMND) {
@ -211,27 +211,25 @@ void _zfcp_hba_dbf_event_fsf_response(const char *tag2, int level,
char *buf = (char *)qtcb + qtcb->header.log_start; char *buf = (char *)qtcb + qtcb->header.log_start;
int len = qtcb->header.log_length; int len = qtcb->header.log_length;
for (; len && !buf[len - 1]; len--); for (; len && !buf[len - 1]; len--);
zfcp_dbf_hexdump(dbf->hba_dbf, rec, sizeof(*rec), level, buf, zfcp_dbf_hexdump(dbf->hba, rec, sizeof(*rec), level, buf,
len); len);
} }
spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags); spin_unlock_irqrestore(&dbf->hba_lock, flags);
} }
void _zfcp_hba_dbf_event_fsf_unsol(const char *tag, int level, void _zfcp_dbf_hba_fsf_unsol(const char *tag, int level, struct zfcp_dbf *dbf,
struct zfcp_adapter *adapter, struct fsf_status_read_buffer *status_buffer)
struct fsf_status_read_buffer *status_buffer)
{ {
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf_hba_record *rec = &dbf->hba_buf;
struct zfcp_hba_dbf_record *rec = &dbf->hba_dbf_buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->hba_dbf_lock, flags); spin_lock_irqsave(&dbf->hba_lock, flags);
memset(rec, 0, sizeof(*rec)); memset(rec, 0, sizeof(*rec));
strncpy(rec->tag, "stat", ZFCP_DBF_TAG_SIZE); strncpy(rec->tag, "stat", ZFCP_DBF_TAG_SIZE);
strncpy(rec->tag2, tag, ZFCP_DBF_TAG_SIZE); strncpy(rec->tag2, tag, ZFCP_DBF_TAG_SIZE);
rec->u.status.failed = atomic_read(&adapter->stat_miss); rec->u.status.failed = atomic_read(&dbf->adapter->stat_miss);
if (status_buffer != NULL) { if (status_buffer != NULL) {
rec->u.status.status_type = status_buffer->status_type; rec->u.status.status_type = status_buffer->status_type;
rec->u.status.status_subtype = status_buffer->status_subtype; rec->u.status.status_subtype = status_buffer->status_subtype;
@ -268,58 +266,54 @@ void _zfcp_hba_dbf_event_fsf_unsol(const char *tag, int level,
&status_buffer->payload, rec->u.status.payload_size); &status_buffer->payload, rec->u.status.payload_size);
} }
debug_event(dbf->hba_dbf, level, rec, sizeof(*rec)); debug_event(dbf->hba, level, rec, sizeof(*rec));
spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags); spin_unlock_irqrestore(&dbf->hba_lock, flags);
} }
/** /**
* zfcp_hba_dbf_event_qdio - trace event for QDIO related failure * zfcp_dbf_hba_qdio - trace event for QDIO related failure
* @qdio: qdio structure affected by this QDIO related event * @qdio: qdio structure affected by this QDIO related event
* @qdio_error: as passed by qdio module * @qdio_error: as passed by qdio module
* @sbal_index: first buffer with error condition, as passed by qdio module * @sbal_index: first buffer with error condition, as passed by qdio module
* @sbal_count: number of buffers affected, as passed by qdio module * @sbal_count: number of buffers affected, as passed by qdio module
*/ */
void zfcp_hba_dbf_event_qdio(struct zfcp_qdio *qdio, void zfcp_dbf_hba_qdio(struct zfcp_dbf *dbf, unsigned int qdio_error,
unsigned int qdio_error, int sbal_index, int sbal_index, int sbal_count)
int sbal_count)
{ {
struct zfcp_dbf *dbf = qdio->adapter->dbf; struct zfcp_dbf_hba_record *r = &dbf->hba_buf;
struct zfcp_hba_dbf_record *r = &dbf->hba_dbf_buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->hba_dbf_lock, flags); spin_lock_irqsave(&dbf->hba_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
strncpy(r->tag, "qdio", ZFCP_DBF_TAG_SIZE); strncpy(r->tag, "qdio", ZFCP_DBF_TAG_SIZE);
r->u.qdio.qdio_error = qdio_error; r->u.qdio.qdio_error = qdio_error;
r->u.qdio.sbal_index = sbal_index; r->u.qdio.sbal_index = sbal_index;
r->u.qdio.sbal_count = sbal_count; r->u.qdio.sbal_count = sbal_count;
debug_event(dbf->hba_dbf, 0, r, sizeof(*r)); debug_event(dbf->hba, 0, r, sizeof(*r));
spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags); spin_unlock_irqrestore(&dbf->hba_lock, flags);
} }
/** /**
* zfcp_hba_dbf_event_berr - trace event for bit error threshold * zfcp_dbf_hba_berr - trace event for bit error threshold
* @adapter: adapter affected by this QDIO related event * @dbf: dbf structure affected by this QDIO related event
* @req: fsf request * @req: fsf request
*/ */
void zfcp_hba_dbf_event_berr(struct zfcp_adapter *adapter, void zfcp_dbf_hba_berr(struct zfcp_dbf *dbf, struct zfcp_fsf_req *req)
struct zfcp_fsf_req *req)
{ {
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf_hba_record *r = &dbf->hba_buf;
struct zfcp_hba_dbf_record *r = &dbf->hba_dbf_buf;
struct fsf_status_read_buffer *sr_buf = req->data; struct fsf_status_read_buffer *sr_buf = req->data;
struct fsf_bit_error_payload *err = &sr_buf->payload.bit_error; struct fsf_bit_error_payload *err = &sr_buf->payload.bit_error;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->hba_dbf_lock, flags); spin_lock_irqsave(&dbf->hba_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
strncpy(r->tag, "berr", ZFCP_DBF_TAG_SIZE); strncpy(r->tag, "berr", ZFCP_DBF_TAG_SIZE);
memcpy(&r->u.berr, err, sizeof(struct fsf_bit_error_payload)); memcpy(&r->u.berr, err, sizeof(struct fsf_bit_error_payload));
debug_event(dbf->hba_dbf, 0, r, sizeof(*r)); debug_event(dbf->hba, 0, r, sizeof(*r));
spin_unlock_irqrestore(&dbf->hba_dbf_lock, flags); spin_unlock_irqrestore(&dbf->hba_lock, flags);
} }
static void zfcp_hba_dbf_view_response(char **p, static void zfcp_dbf_hba_view_response(char **p,
struct zfcp_hba_dbf_record_response *r) struct zfcp_dbf_hba_record_response *r)
{ {
struct timespec t; struct timespec t;
@ -380,8 +374,8 @@ static void zfcp_hba_dbf_view_response(char **p,
} }
} }
static void zfcp_hba_dbf_view_status(char **p, static void zfcp_dbf_hba_view_status(char **p,
struct zfcp_hba_dbf_record_status *r) struct zfcp_dbf_hba_record_status *r)
{ {
zfcp_dbf_out(p, "failed", "0x%02x", r->failed); zfcp_dbf_out(p, "failed", "0x%02x", r->failed);
zfcp_dbf_out(p, "status_type", "0x%08x", r->status_type); zfcp_dbf_out(p, "status_type", "0x%08x", r->status_type);
@ -393,14 +387,14 @@ static void zfcp_hba_dbf_view_status(char **p,
r->payload_size); r->payload_size);
} }
static void zfcp_hba_dbf_view_qdio(char **p, struct zfcp_hba_dbf_record_qdio *r) static void zfcp_dbf_hba_view_qdio(char **p, struct zfcp_dbf_hba_record_qdio *r)
{ {
zfcp_dbf_out(p, "qdio_error", "0x%08x", r->qdio_error); zfcp_dbf_out(p, "qdio_error", "0x%08x", r->qdio_error);
zfcp_dbf_out(p, "sbal_index", "0x%02x", r->sbal_index); zfcp_dbf_out(p, "sbal_index", "0x%02x", r->sbal_index);
zfcp_dbf_out(p, "sbal_count", "0x%02x", r->sbal_count); zfcp_dbf_out(p, "sbal_count", "0x%02x", r->sbal_count);
} }
static void zfcp_hba_dbf_view_berr(char **p, struct fsf_bit_error_payload *r) static void zfcp_dbf_hba_view_berr(char **p, struct fsf_bit_error_payload *r)
{ {
zfcp_dbf_out(p, "link_failures", "%d", r->link_failure_error_count); zfcp_dbf_out(p, "link_failures", "%d", r->link_failure_error_count);
zfcp_dbf_out(p, "loss_of_sync_err", "%d", r->loss_of_sync_error_count); zfcp_dbf_out(p, "loss_of_sync_err", "%d", r->loss_of_sync_error_count);
@ -424,10 +418,10 @@ static void zfcp_hba_dbf_view_berr(char **p, struct fsf_bit_error_payload *r)
r->current_transmit_b2b_credit); r->current_transmit_b2b_credit);
} }
static int zfcp_hba_dbf_view_format(debug_info_t *id, struct debug_view *view, static int zfcp_dbf_hba_view_format(debug_info_t *id, struct debug_view *view,
char *out_buf, const char *in_buf) char *out_buf, const char *in_buf)
{ {
struct zfcp_hba_dbf_record *r = (struct zfcp_hba_dbf_record *)in_buf; struct zfcp_dbf_hba_record *r = (struct zfcp_dbf_hba_record *)in_buf;
char *p = out_buf; char *p = out_buf;
if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0) if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0)
@ -438,45 +432,42 @@ static int zfcp_hba_dbf_view_format(debug_info_t *id, struct debug_view *view,
zfcp_dbf_tag(&p, "tag2", r->tag2); zfcp_dbf_tag(&p, "tag2", r->tag2);
if (strncmp(r->tag, "resp", ZFCP_DBF_TAG_SIZE) == 0) if (strncmp(r->tag, "resp", ZFCP_DBF_TAG_SIZE) == 0)
zfcp_hba_dbf_view_response(&p, &r->u.response); zfcp_dbf_hba_view_response(&p, &r->u.response);
else if (strncmp(r->tag, "stat", ZFCP_DBF_TAG_SIZE) == 0) else if (strncmp(r->tag, "stat", ZFCP_DBF_TAG_SIZE) == 0)
zfcp_hba_dbf_view_status(&p, &r->u.status); zfcp_dbf_hba_view_status(&p, &r->u.status);
else if (strncmp(r->tag, "qdio", ZFCP_DBF_TAG_SIZE) == 0) else if (strncmp(r->tag, "qdio", ZFCP_DBF_TAG_SIZE) == 0)
zfcp_hba_dbf_view_qdio(&p, &r->u.qdio); zfcp_dbf_hba_view_qdio(&p, &r->u.qdio);
else if (strncmp(r->tag, "berr", ZFCP_DBF_TAG_SIZE) == 0) else if (strncmp(r->tag, "berr", ZFCP_DBF_TAG_SIZE) == 0)
zfcp_hba_dbf_view_berr(&p, &r->u.berr); zfcp_dbf_hba_view_berr(&p, &r->u.berr);
if (strncmp(r->tag, "resp", ZFCP_DBF_TAG_SIZE) != 0) if (strncmp(r->tag, "resp", ZFCP_DBF_TAG_SIZE) != 0)
p += sprintf(p, "\n"); p += sprintf(p, "\n");
return p - out_buf; return p - out_buf;
} }
static struct debug_view zfcp_hba_dbf_view = { static struct debug_view zfcp_dbf_hba_view = {
"structured", .name = "structured",
NULL, .header_proc = zfcp_dbf_view_header,
&zfcp_dbf_view_header, .format_proc = zfcp_dbf_hba_view_format,
&zfcp_hba_dbf_view_format,
NULL,
NULL
}; };
static const char *zfcp_rec_dbf_tags[] = { static const char *zfcp_dbf_rec_tags[] = {
[ZFCP_REC_DBF_ID_THREAD] = "thread", [ZFCP_REC_DBF_ID_THREAD] = "thread",
[ZFCP_REC_DBF_ID_TARGET] = "target", [ZFCP_REC_DBF_ID_TARGET] = "target",
[ZFCP_REC_DBF_ID_TRIGGER] = "trigger", [ZFCP_REC_DBF_ID_TRIGGER] = "trigger",
[ZFCP_REC_DBF_ID_ACTION] = "action", [ZFCP_REC_DBF_ID_ACTION] = "action",
}; };
static int zfcp_rec_dbf_view_format(debug_info_t *id, struct debug_view *view, static int zfcp_dbf_rec_view_format(debug_info_t *id, struct debug_view *view,
char *buf, const char *_rec) char *buf, const char *_rec)
{ {
struct zfcp_rec_dbf_record *r = (struct zfcp_rec_dbf_record *)_rec; struct zfcp_dbf_rec_record *r = (struct zfcp_dbf_rec_record *)_rec;
char *p = buf; char *p = buf;
char hint[ZFCP_DBF_ID_SIZE + 1]; char hint[ZFCP_DBF_ID_SIZE + 1];
memcpy(hint, r->id2, ZFCP_DBF_ID_SIZE); memcpy(hint, r->id2, ZFCP_DBF_ID_SIZE);
hint[ZFCP_DBF_ID_SIZE] = 0; hint[ZFCP_DBF_ID_SIZE] = 0;
zfcp_dbf_outs(&p, "tag", zfcp_rec_dbf_tags[r->id]); zfcp_dbf_outs(&p, "tag", zfcp_dbf_rec_tags[r->id]);
zfcp_dbf_outs(&p, "hint", hint); zfcp_dbf_outs(&p, "hint", hint);
switch (r->id) { switch (r->id) {
case ZFCP_REC_DBF_ID_THREAD: case ZFCP_REC_DBF_ID_THREAD:
@ -514,25 +505,22 @@ static int zfcp_rec_dbf_view_format(debug_info_t *id, struct debug_view *view,
return p - buf; return p - buf;
} }
static struct debug_view zfcp_rec_dbf_view = { static struct debug_view zfcp_dbf_rec_view = {
"structured", .name = "structured",
NULL, .header_proc = zfcp_dbf_view_header,
&zfcp_dbf_view_header, .format_proc = zfcp_dbf_rec_view_format,
&zfcp_rec_dbf_view_format,
NULL,
NULL
}; };
/** /**
* zfcp_rec_dbf_event_thread - trace event related to recovery thread operation * zfcp_dbf_rec_thread - trace event related to recovery thread operation
* @id2: identifier for event * @id2: identifier for event
* @adapter: adapter * @dbf: reference to dbf structure
* This function assumes that the caller is holding erp_lock. * This function assumes that the caller is holding erp_lock.
*/ */
void zfcp_rec_dbf_event_thread(char *id2, struct zfcp_adapter *adapter) void zfcp_dbf_rec_thread(char *id2, struct zfcp_dbf *dbf)
{ {
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_adapter *adapter = dbf->adapter;
struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf; struct zfcp_dbf_rec_record *r = &dbf->rec_buf;
unsigned long flags = 0; unsigned long flags = 0;
struct list_head *entry; struct list_head *entry;
unsigned ready = 0, running = 0, total; unsigned ready = 0, running = 0, total;
@ -543,42 +531,41 @@ void zfcp_rec_dbf_event_thread(char *id2, struct zfcp_adapter *adapter)
running++; running++;
total = adapter->erp_total_count; total = adapter->erp_total_count;
spin_lock_irqsave(&dbf->rec_dbf_lock, flags); spin_lock_irqsave(&dbf->rec_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
r->id = ZFCP_REC_DBF_ID_THREAD; r->id = ZFCP_REC_DBF_ID_THREAD;
memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE); memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE);
r->u.thread.total = total; r->u.thread.total = total;
r->u.thread.ready = ready; r->u.thread.ready = ready;
r->u.thread.running = running; r->u.thread.running = running;
debug_event(dbf->rec_dbf, 6, r, sizeof(*r)); debug_event(dbf->rec, 6, r, sizeof(*r));
spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags); spin_unlock_irqrestore(&dbf->rec_lock, flags);
} }
/** /**
* zfcp_rec_dbf_event_thread - trace event related to recovery thread operation * zfcp_dbf_rec_thread - trace event related to recovery thread operation
* @id2: identifier for event * @id2: identifier for event
* @adapter: adapter * @adapter: adapter
* This function assumes that the caller does not hold erp_lock. * This function assumes that the caller does not hold erp_lock.
*/ */
void zfcp_rec_dbf_event_thread_lock(char *id2, struct zfcp_adapter *adapter) void zfcp_dbf_rec_thread_lock(char *id2, struct zfcp_dbf *dbf)
{ {
struct zfcp_adapter *adapter = dbf->adapter;
unsigned long flags; unsigned long flags;
read_lock_irqsave(&adapter->erp_lock, flags); read_lock_irqsave(&adapter->erp_lock, flags);
zfcp_rec_dbf_event_thread(id2, adapter); zfcp_dbf_rec_thread(id2, dbf);
read_unlock_irqrestore(&adapter->erp_lock, flags); read_unlock_irqrestore(&adapter->erp_lock, flags);
} }
static void zfcp_rec_dbf_event_target(char *id2, void *ref, static void zfcp_dbf_rec_target(char *id2, void *ref, struct zfcp_dbf *dbf,
struct zfcp_adapter *adapter, atomic_t *status, atomic_t *erp_count, u64 wwpn,
atomic_t *status, atomic_t *erp_count, u32 d_id, u64 fcp_lun)
u64 wwpn, u32 d_id, u64 fcp_lun)
{ {
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf_rec_record *r = &dbf->rec_buf;
struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->rec_dbf_lock, flags); spin_lock_irqsave(&dbf->rec_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
r->id = ZFCP_REC_DBF_ID_TARGET; r->id = ZFCP_REC_DBF_ID_TARGET;
memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE); memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE);
@ -588,56 +575,57 @@ static void zfcp_rec_dbf_event_target(char *id2, void *ref,
r->u.target.d_id = d_id; r->u.target.d_id = d_id;
r->u.target.fcp_lun = fcp_lun; r->u.target.fcp_lun = fcp_lun;
r->u.target.erp_count = atomic_read(erp_count); r->u.target.erp_count = atomic_read(erp_count);
debug_event(dbf->rec_dbf, 3, r, sizeof(*r)); debug_event(dbf->rec, 3, r, sizeof(*r));
spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags); spin_unlock_irqrestore(&dbf->rec_lock, flags);
} }
/** /**
* zfcp_rec_dbf_event_adapter - trace event for adapter state change * zfcp_dbf_rec_adapter - trace event for adapter state change
* @id: identifier for trigger of state change * @id: identifier for trigger of state change
* @ref: additional reference (e.g. request) * @ref: additional reference (e.g. request)
* @adapter: adapter * @dbf: reference to dbf structure
*/ */
void zfcp_rec_dbf_event_adapter(char *id, void *ref, void zfcp_dbf_rec_adapter(char *id, void *ref, struct zfcp_dbf *dbf)
struct zfcp_adapter *adapter)
{ {
zfcp_rec_dbf_event_target(id, ref, adapter, &adapter->status, struct zfcp_adapter *adapter = dbf->adapter;
zfcp_dbf_rec_target(id, ref, dbf, &adapter->status,
&adapter->erp_counter, 0, 0, 0); &adapter->erp_counter, 0, 0, 0);
} }
/** /**
* zfcp_rec_dbf_event_port - trace event for port state change * zfcp_dbf_rec_port - trace event for port state change
* @id: identifier for trigger of state change * @id: identifier for trigger of state change
* @ref: additional reference (e.g. request) * @ref: additional reference (e.g. request)
* @port: port * @port: port
*/ */
void zfcp_rec_dbf_event_port(char *id, void *ref, struct zfcp_port *port) void zfcp_dbf_rec_port(char *id, void *ref, struct zfcp_port *port)
{ {
struct zfcp_adapter *adapter = port->adapter; struct zfcp_dbf *dbf = port->adapter->dbf;
zfcp_rec_dbf_event_target(id, ref, adapter, &port->status, zfcp_dbf_rec_target(id, ref, dbf, &port->status,
&port->erp_counter, port->wwpn, port->d_id, &port->erp_counter, port->wwpn, port->d_id,
0); 0);
} }
/** /**
* zfcp_rec_dbf_event_unit - trace event for unit state change * zfcp_dbf_rec_unit - trace event for unit state change
* @id: identifier for trigger of state change * @id: identifier for trigger of state change
* @ref: additional reference (e.g. request) * @ref: additional reference (e.g. request)
* @unit: unit * @unit: unit
*/ */
void zfcp_rec_dbf_event_unit(char *id, void *ref, struct zfcp_unit *unit) void zfcp_dbf_rec_unit(char *id, void *ref, struct zfcp_unit *unit)
{ {
struct zfcp_port *port = unit->port; struct zfcp_port *port = unit->port;
struct zfcp_adapter *adapter = port->adapter; struct zfcp_dbf *dbf = port->adapter->dbf;
zfcp_rec_dbf_event_target(id, ref, adapter, &unit->status, zfcp_dbf_rec_target(id, ref, dbf, &unit->status,
&unit->erp_counter, port->wwpn, port->d_id, &unit->erp_counter, port->wwpn, port->d_id,
unit->fcp_lun); unit->fcp_lun);
} }
/** /**
* zfcp_rec_dbf_event_trigger - trace event for triggered error recovery * zfcp_dbf_rec_trigger - trace event for triggered error recovery
* @id2: identifier for error recovery trigger * @id2: identifier for error recovery trigger
* @ref: additional reference (e.g. request) * @ref: additional reference (e.g. request)
* @want: originally requested error recovery action * @want: originally requested error recovery action
@ -647,15 +635,15 @@ void zfcp_rec_dbf_event_unit(char *id, void *ref, struct zfcp_unit *unit)
* @port: port * @port: port
* @unit: unit * @unit: unit
*/ */
void zfcp_rec_dbf_event_trigger(char *id2, void *ref, u8 want, u8 need, void zfcp_dbf_rec_trigger(char *id2, void *ref, u8 want, u8 need, void *action,
void *action, struct zfcp_adapter *adapter, struct zfcp_adapter *adapter, struct zfcp_port *port,
struct zfcp_port *port, struct zfcp_unit *unit) struct zfcp_unit *unit)
{ {
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf *dbf = adapter->dbf;
struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf; struct zfcp_dbf_rec_record *r = &dbf->rec_buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->rec_dbf_lock, flags); spin_lock_irqsave(&dbf->rec_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
r->id = ZFCP_REC_DBF_ID_TRIGGER; r->id = ZFCP_REC_DBF_ID_TRIGGER;
memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE); memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE);
@ -672,23 +660,22 @@ void zfcp_rec_dbf_event_trigger(char *id2, void *ref, u8 want, u8 need,
r->u.trigger.us = atomic_read(&unit->status); r->u.trigger.us = atomic_read(&unit->status);
r->u.trigger.fcp_lun = unit->fcp_lun; r->u.trigger.fcp_lun = unit->fcp_lun;
} }
debug_event(dbf->rec_dbf, action ? 1 : 4, r, sizeof(*r)); debug_event(dbf->rec, action ? 1 : 4, r, sizeof(*r));
spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags); spin_unlock_irqrestore(&dbf->rec_lock, flags);
} }
/** /**
* zfcp_rec_dbf_event_action - trace event showing progress of recovery action * zfcp_dbf_rec_action - trace event showing progress of recovery action
* @id2: identifier * @id2: identifier
* @erp_action: error recovery action struct pointer * @erp_action: error recovery action struct pointer
*/ */
void zfcp_rec_dbf_event_action(char *id2, struct zfcp_erp_action *erp_action) void zfcp_dbf_rec_action(char *id2, struct zfcp_erp_action *erp_action)
{ {
struct zfcp_adapter *adapter = erp_action->adapter; struct zfcp_dbf *dbf = erp_action->adapter->dbf;
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf_rec_record *r = &dbf->rec_buf;
struct zfcp_rec_dbf_record *r = &dbf->rec_dbf_buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->rec_dbf_lock, flags); spin_lock_irqsave(&dbf->rec_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
r->id = ZFCP_REC_DBF_ID_ACTION; r->id = ZFCP_REC_DBF_ID_ACTION;
memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE); memcpy(r->id2, id2, ZFCP_DBF_ID_SIZE);
@ -696,27 +683,27 @@ void zfcp_rec_dbf_event_action(char *id2, struct zfcp_erp_action *erp_action)
r->u.action.status = erp_action->status; r->u.action.status = erp_action->status;
r->u.action.step = erp_action->step; r->u.action.step = erp_action->step;
r->u.action.fsf_req = (unsigned long)erp_action->fsf_req; r->u.action.fsf_req = (unsigned long)erp_action->fsf_req;
debug_event(dbf->rec_dbf, 5, r, sizeof(*r)); debug_event(dbf->rec, 5, r, sizeof(*r));
spin_unlock_irqrestore(&dbf->rec_dbf_lock, flags); spin_unlock_irqrestore(&dbf->rec_lock, flags);
} }
/** /**
* zfcp_san_dbf_event_ct_request - trace event for issued CT request * zfcp_dbf_san_ct_request - trace event for issued CT request
* @fsf_req: request containing issued CT data * @fsf_req: request containing issued CT data
*/ */
void zfcp_san_dbf_event_ct_request(struct zfcp_fsf_req *fsf_req) void zfcp_dbf_san_ct_request(struct zfcp_fsf_req *fsf_req)
{ {
struct zfcp_send_ct *ct = (struct zfcp_send_ct *)fsf_req->data; struct zfcp_send_ct *ct = (struct zfcp_send_ct *)fsf_req->data;
struct zfcp_wka_port *wka_port = ct->wka_port; struct zfcp_wka_port *wka_port = ct->wka_port;
struct zfcp_adapter *adapter = wka_port->adapter; struct zfcp_adapter *adapter = wka_port->adapter;
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf *dbf = adapter->dbf;
struct ct_hdr *hdr = sg_virt(ct->req); struct ct_hdr *hdr = sg_virt(ct->req);
struct zfcp_san_dbf_record *r = &dbf->san_dbf_buf; struct zfcp_dbf_san_record *r = &dbf->san_buf;
struct zfcp_san_dbf_record_ct_request *oct = &r->u.ct_req; struct zfcp_dbf_san_record_ct_request *oct = &r->u.ct_req;
int level = 3; int level = 3;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->san_dbf_lock, flags); spin_lock_irqsave(&dbf->san_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
strncpy(r->tag, "octc", ZFCP_DBF_TAG_SIZE); strncpy(r->tag, "octc", ZFCP_DBF_TAG_SIZE);
r->fsf_reqid = fsf_req->req_id; r->fsf_reqid = fsf_req->req_id;
@ -731,29 +718,29 @@ void zfcp_san_dbf_event_ct_request(struct zfcp_fsf_req *fsf_req)
oct->max_res_size = hdr->max_res_size; oct->max_res_size = hdr->max_res_size;
oct->len = min((int)ct->req->length - (int)sizeof(struct ct_hdr), oct->len = min((int)ct->req->length - (int)sizeof(struct ct_hdr),
ZFCP_DBF_SAN_MAX_PAYLOAD); ZFCP_DBF_SAN_MAX_PAYLOAD);
debug_event(dbf->san_dbf, level, r, sizeof(*r)); debug_event(dbf->san, level, r, sizeof(*r));
zfcp_dbf_hexdump(dbf->san_dbf, r, sizeof(*r), level, zfcp_dbf_hexdump(dbf->san, r, sizeof(*r), level,
(void *)hdr + sizeof(struct ct_hdr), oct->len); (void *)hdr + sizeof(struct ct_hdr), oct->len);
spin_unlock_irqrestore(&dbf->san_dbf_lock, flags); spin_unlock_irqrestore(&dbf->san_lock, flags);
} }
/** /**
* zfcp_san_dbf_event_ct_response - trace event for completion of CT request * zfcp_dbf_san_ct_response - trace event for completion of CT request
* @fsf_req: request containing CT response * @fsf_req: request containing CT response
*/ */
void zfcp_san_dbf_event_ct_response(struct zfcp_fsf_req *fsf_req) void zfcp_dbf_san_ct_response(struct zfcp_fsf_req *fsf_req)
{ {
struct zfcp_send_ct *ct = (struct zfcp_send_ct *)fsf_req->data; struct zfcp_send_ct *ct = (struct zfcp_send_ct *)fsf_req->data;
struct zfcp_wka_port *wka_port = ct->wka_port; struct zfcp_wka_port *wka_port = ct->wka_port;
struct zfcp_adapter *adapter = wka_port->adapter; struct zfcp_adapter *adapter = wka_port->adapter;
struct ct_hdr *hdr = sg_virt(ct->resp); struct ct_hdr *hdr = sg_virt(ct->resp);
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf *dbf = adapter->dbf;
struct zfcp_san_dbf_record *r = &dbf->san_dbf_buf; struct zfcp_dbf_san_record *r = &dbf->san_buf;
struct zfcp_san_dbf_record_ct_response *rct = &r->u.ct_resp; struct zfcp_dbf_san_record_ct_response *rct = &r->u.ct_resp;
int level = 3; int level = 3;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->san_dbf_lock, flags); spin_lock_irqsave(&dbf->san_lock, flags);
memset(r, 0, sizeof(*r)); memset(r, 0, sizeof(*r));
strncpy(r->tag, "rctc", ZFCP_DBF_TAG_SIZE); strncpy(r->tag, "rctc", ZFCP_DBF_TAG_SIZE);
r->fsf_reqid = fsf_req->req_id; r->fsf_reqid = fsf_req->req_id;
@ -768,23 +755,22 @@ void zfcp_san_dbf_event_ct_response(struct zfcp_fsf_req *fsf_req)
rct->max_res_size = hdr->max_res_size; rct->max_res_size = hdr->max_res_size;
rct->len = min((int)ct->resp->length - (int)sizeof(struct ct_hdr), rct->len = min((int)ct->resp->length - (int)sizeof(struct ct_hdr),
ZFCP_DBF_SAN_MAX_PAYLOAD); ZFCP_DBF_SAN_MAX_PAYLOAD);
debug_event(dbf->san_dbf, level, r, sizeof(*r)); debug_event(dbf->san, level, r, sizeof(*r));
zfcp_dbf_hexdump(dbf->san_dbf, r, sizeof(*r), level, zfcp_dbf_hexdump(dbf->san, r, sizeof(*r), level,
(void *)hdr + sizeof(struct ct_hdr), rct->len); (void *)hdr + sizeof(struct ct_hdr), rct->len);
spin_unlock_irqrestore(&dbf->san_dbf_lock, flags); spin_unlock_irqrestore(&dbf->san_lock, flags);
} }
static void zfcp_san_dbf_event_els(const char *tag, int level, static void zfcp_dbf_san_els(const char *tag, int level,
struct zfcp_fsf_req *fsf_req, u32 s_id, struct zfcp_fsf_req *fsf_req, u32 s_id, u32 d_id,
u32 d_id, u8 ls_code, void *buffer, u8 ls_code, void *buffer, int buflen)
int buflen)
{ {
struct zfcp_adapter *adapter = fsf_req->adapter; struct zfcp_adapter *adapter = fsf_req->adapter;
struct zfcp_dbf *dbf = adapter->dbf; struct zfcp_dbf *dbf = adapter->dbf;
struct zfcp_san_dbf_record *rec = &dbf->san_dbf_buf; struct zfcp_dbf_san_record *rec = &dbf->san_buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dbf->san_dbf_lock, flags); spin_lock_irqsave(&dbf->san_lock, flags);
memset(rec, 0, sizeof(*rec)); memset(rec, 0, sizeof(*rec));
strncpy(rec->tag, tag, ZFCP_DBF_TAG_SIZE); strncpy(rec->tag, tag, ZFCP_DBF_TAG_SIZE);
rec->fsf_reqid = fsf_req->req_id; rec->fsf_reqid = fsf_req->req_id;
@ -792,45 +778,45 @@ static void zfcp_san_dbf_event_els(const char *tag, int level,
rec->s_id = s_id; rec->s_id = s_id;
rec->d_id = d_id; rec->d_id = d_id;
rec->u.els.ls_code = ls_code; rec->u.els.ls_code = ls_code;
debug_event(dbf->san_dbf, level, rec, sizeof(*rec)); debug_event(dbf->san, level, rec, sizeof(*rec));
zfcp_dbf_hexdump(dbf->san_dbf, rec, sizeof(*rec), level, zfcp_dbf_hexdump(dbf->san, rec, sizeof(*rec), level,
buffer, min(buflen, ZFCP_DBF_SAN_MAX_PAYLOAD)); buffer, min(buflen, ZFCP_DBF_SAN_MAX_PAYLOAD));
spin_unlock_irqrestore(&dbf->san_dbf_lock, flags); spin_unlock_irqrestore(&dbf->san_lock, flags);
} }
/** /**
* zfcp_san_dbf_event_els_request - trace event for issued ELS * zfcp_dbf_san_els_request - trace event for issued ELS
* @fsf_req: request containing issued ELS * @fsf_req: request containing issued ELS
*/ */
void zfcp_san_dbf_event_els_request(struct zfcp_fsf_req *fsf_req) void zfcp_dbf_san_els_request(struct zfcp_fsf_req *fsf_req)
{ {
struct zfcp_send_els *els = (struct zfcp_send_els *)fsf_req->data; struct zfcp_send_els *els = (struct zfcp_send_els *)fsf_req->data;
zfcp_san_dbf_event_els("oels", 2, fsf_req, zfcp_dbf_san_els("oels", 2, fsf_req,
fc_host_port_id(els->adapter->scsi_host), fc_host_port_id(els->adapter->scsi_host),
els->d_id, *(u8 *) sg_virt(els->req), els->d_id, *(u8 *) sg_virt(els->req),
sg_virt(els->req), els->req->length); sg_virt(els->req), els->req->length);
} }
/** /**
* zfcp_san_dbf_event_els_response - trace event for completed ELS * zfcp_dbf_san_els_response - trace event for completed ELS
* @fsf_req: request containing ELS response * @fsf_req: request containing ELS response
*/ */
void zfcp_san_dbf_event_els_response(struct zfcp_fsf_req *fsf_req) void zfcp_dbf_san_els_response(struct zfcp_fsf_req *fsf_req)
{ {
struct zfcp_send_els *els = (struct zfcp_send_els *)fsf_req->data; struct zfcp_send_els *els = (struct zfcp_send_els *)fsf_req->data;
zfcp_san_dbf_event_els("rels", 2, fsf_req, els->d_id, zfcp_dbf_san_els("rels", 2, fsf_req, els->d_id,
fc_host_port_id(els->adapter->scsi_host), fc_host_port_id(els->adapter->scsi_host),
*(u8 *)sg_virt(els->req), sg_virt(els->resp), *(u8 *)sg_virt(els->req), sg_virt(els->resp),
els->resp->length); els->resp->length);
} }
/** /**
* zfcp_san_dbf_event_incoming_els - trace event for incomig ELS * zfcp_dbf_san_incoming_els - trace event for incomig ELS
* @fsf_req: request containing unsolicited status buffer with incoming ELS * @fsf_req: request containing unsolicited status buffer with incoming ELS
*/ */
void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *fsf_req) void zfcp_dbf_san_incoming_els(struct zfcp_fsf_req *fsf_req)
{ {
struct zfcp_adapter *adapter = fsf_req->adapter; struct zfcp_adapter *adapter = fsf_req->adapter;
struct fsf_status_read_buffer *buf = struct fsf_status_read_buffer *buf =
@ -838,16 +824,16 @@ void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *fsf_req)
int length = (int)buf->length - int length = (int)buf->length -
(int)((void *)&buf->payload - (void *)buf); (int)((void *)&buf->payload - (void *)buf);
zfcp_san_dbf_event_els("iels", 1, fsf_req, buf->d_id, zfcp_dbf_san_els("iels", 1, fsf_req, buf->d_id,
fc_host_port_id(adapter->scsi_host), fc_host_port_id(adapter->scsi_host),
buf->payload.data[0], (void *)buf->payload.data, buf->payload.data[0], (void *)buf->payload.data,
length); length);
} }
static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view, static int zfcp_dbf_san_view_format(debug_info_t *id, struct debug_view *view,
char *out_buf, const char *in_buf) char *out_buf, const char *in_buf)
{ {
struct zfcp_san_dbf_record *r = (struct zfcp_san_dbf_record *)in_buf; struct zfcp_dbf_san_record *r = (struct zfcp_dbf_san_record *)in_buf;
char *p = out_buf; char *p = out_buf;
if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0) if (strncmp(r->tag, "dump", ZFCP_DBF_TAG_SIZE) == 0)
@ -860,7 +846,7 @@ static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view,
zfcp_dbf_out(&p, "d_id", "0x%06x", r->d_id); zfcp_dbf_out(&p, "d_id", "0x%06x", r->d_id);
if (strncmp(r->tag, "octc", ZFCP_DBF_TAG_SIZE) == 0) { if (strncmp(r->tag, "octc", ZFCP_DBF_TAG_SIZE) == 0) {
struct zfcp_san_dbf_record_ct_request *ct = &r->u.ct_req; struct zfcp_dbf_san_record_ct_request *ct = &r->u.ct_req;
zfcp_dbf_out(&p, "cmd_req_code", "0x%04x", ct->cmd_req_code); zfcp_dbf_out(&p, "cmd_req_code", "0x%04x", ct->cmd_req_code);
zfcp_dbf_out(&p, "revision", "0x%02x", ct->revision); zfcp_dbf_out(&p, "revision", "0x%02x", ct->revision);
zfcp_dbf_out(&p, "gs_type", "0x%02x", ct->gs_type); zfcp_dbf_out(&p, "gs_type", "0x%02x", ct->gs_type);
@ -868,7 +854,7 @@ static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view,
zfcp_dbf_out(&p, "options", "0x%02x", ct->options); zfcp_dbf_out(&p, "options", "0x%02x", ct->options);
zfcp_dbf_out(&p, "max_res_size", "0x%04x", ct->max_res_size); zfcp_dbf_out(&p, "max_res_size", "0x%04x", ct->max_res_size);
} else if (strncmp(r->tag, "rctc", ZFCP_DBF_TAG_SIZE) == 0) { } else if (strncmp(r->tag, "rctc", ZFCP_DBF_TAG_SIZE) == 0) {
struct zfcp_san_dbf_record_ct_response *ct = &r->u.ct_resp; struct zfcp_dbf_san_record_ct_response *ct = &r->u.ct_resp;
zfcp_dbf_out(&p, "cmd_rsp_code", "0x%04x", ct->cmd_rsp_code); zfcp_dbf_out(&p, "cmd_rsp_code", "0x%04x", ct->cmd_rsp_code);
zfcp_dbf_out(&p, "revision", "0x%02x", ct->revision); zfcp_dbf_out(&p, "revision", "0x%02x", ct->revision);
zfcp_dbf_out(&p, "reason_code", "0x%02x", ct->reason_code); zfcp_dbf_out(&p, "reason_code", "0x%02x", ct->reason_code);
@ -878,34 +864,30 @@ static int zfcp_san_dbf_view_format(debug_info_t *id, struct debug_view *view,
} else if (strncmp(r->tag, "oels", ZFCP_DBF_TAG_SIZE) == 0 || } else if (strncmp(r->tag, "oels", ZFCP_DBF_TAG_SIZE) == 0 ||
strncmp(r->tag, "rels", ZFCP_DBF_TAG_SIZE) == 0 || strncmp(r->tag, "rels", ZFCP_DBF_TAG_SIZE) == 0 ||
strncmp(r->tag, "iels", ZFCP_DBF_TAG_SIZE) == 0) { strncmp(r->tag, "iels", ZFCP_DBF_TAG_SIZE) == 0) {
struct zfcp_san_dbf_record_els *els = &r->u.els; struct zfcp_dbf_san_record_els *els = &r->u.els;
zfcp_dbf_out(&p, "ls_code", "0x%02x", els->ls_code); zfcp_dbf_out(&p, "ls_code", "0x%02x", els->ls_code);
} }
return p - out_buf; return p - out_buf;
} }
static struct debug_view zfcp_san_dbf_view = { static struct debug_view zfcp_dbf_san_view = {
"structured", .name = "structured",
NULL, .header_proc = zfcp_dbf_view_header,
&zfcp_dbf_view_header, .format_proc = zfcp_dbf_san_view_format,
&zfcp_san_dbf_view_format,
NULL,
NULL
}; };
void _zfcp_scsi_dbf_event(const char *tag, const char *tag2, int level, void _zfcp_dbf_scsi(const char *tag, const char *tag2, int level,
struct zfcp_dbf *dbf, struct scsi_cmnd *scsi_cmnd, struct zfcp_dbf *dbf, struct scsi_cmnd *scsi_cmnd,
struct zfcp_fsf_req *fsf_req, struct zfcp_fsf_req *fsf_req, unsigned long old_req_id)
unsigned long old_req_id)
{ {
struct zfcp_scsi_dbf_record *rec = &dbf->scsi_dbf_buf; struct zfcp_dbf_scsi_record *rec = &dbf->scsi_buf;
struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)rec; struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)rec;
unsigned long flags; unsigned long flags;
struct fcp_rsp_iu *fcp_rsp; struct fcp_rsp_iu *fcp_rsp;
char *fcp_rsp_info = NULL, *fcp_sns_info = NULL; char *fcp_rsp_info = NULL, *fcp_sns_info = NULL;
int offset = 0, buflen = 0; int offset = 0, buflen = 0;
spin_lock_irqsave(&dbf->scsi_dbf_lock, flags); spin_lock_irqsave(&dbf->scsi_lock, flags);
do { do {
memset(rec, 0, sizeof(*rec)); memset(rec, 0, sizeof(*rec));
if (offset == 0) { if (offset == 0) {
@ -959,20 +941,20 @@ void _zfcp_scsi_dbf_event(const char *tag, const char *tag2, int level,
dump->offset = offset; dump->offset = offset;
dump->size = min(buflen - offset, dump->size = min(buflen - offset,
(int)sizeof(struct (int)sizeof(struct
zfcp_scsi_dbf_record) - zfcp_dbf_scsi_record) -
(int)sizeof(struct zfcp_dbf_dump)); (int)sizeof(struct zfcp_dbf_dump));
memcpy(dump->data, fcp_sns_info + offset, dump->size); memcpy(dump->data, fcp_sns_info + offset, dump->size);
offset += dump->size; offset += dump->size;
} }
debug_event(dbf->scsi_dbf, level, rec, sizeof(*rec)); debug_event(dbf->scsi, level, rec, sizeof(*rec));
} while (offset < buflen); } while (offset < buflen);
spin_unlock_irqrestore(&dbf->scsi_dbf_lock, flags); spin_unlock_irqrestore(&dbf->scsi_lock, flags);
} }
static int zfcp_scsi_dbf_view_format(debug_info_t *id, struct debug_view *view, static int zfcp_dbf_scsi_view_format(debug_info_t *id, struct debug_view *view,
char *out_buf, const char *in_buf) char *out_buf, const char *in_buf)
{ {
struct zfcp_scsi_dbf_record *r = (struct zfcp_scsi_dbf_record *)in_buf; struct zfcp_dbf_scsi_record *r = (struct zfcp_dbf_scsi_record *)in_buf;
struct timespec t; struct timespec t;
char *p = out_buf; char *p = out_buf;
@ -1013,13 +995,10 @@ static int zfcp_scsi_dbf_view_format(debug_info_t *id, struct debug_view *view,
return p - out_buf; return p - out_buf;
} }
static struct debug_view zfcp_scsi_dbf_view = { static struct debug_view zfcp_dbf_scsi_view = {
"structured", .name = "structured",
NULL, .header_proc = zfcp_dbf_view_header,
&zfcp_dbf_view_header, .format_proc = zfcp_dbf_scsi_view_format,
&zfcp_scsi_dbf_view_format,
NULL,
NULL
}; };
static debug_info_t *zfcp_dbf_reg(const char *name, int level, static debug_info_t *zfcp_dbf_reg(const char *name, int level,
@ -1043,7 +1022,7 @@ static debug_info_t *zfcp_dbf_reg(const char *name, int level,
* @adapter: pointer to adapter for which debug features should be registered * @adapter: pointer to adapter for which debug features should be registered
* return: -ENOMEM on error, 0 otherwise * return: -ENOMEM on error, 0 otherwise
*/ */
int zfcp_adapter_debug_register(struct zfcp_adapter *adapter) int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter)
{ {
char dbf_name[DEBUG_MAX_NAME_LEN]; char dbf_name[DEBUG_MAX_NAME_LEN];
struct zfcp_dbf *dbf; struct zfcp_dbf *dbf;
@ -1052,63 +1031,60 @@ int zfcp_adapter_debug_register(struct zfcp_adapter *adapter)
if (!dbf) if (!dbf)
return -ENOMEM; return -ENOMEM;
spin_lock_init(&dbf->hba_dbf_lock); dbf->adapter = adapter;
spin_lock_init(&dbf->san_dbf_lock);
spin_lock_init(&dbf->scsi_dbf_lock); spin_lock_init(&dbf->hba_lock);
spin_lock_init(&dbf->rec_dbf_lock); spin_lock_init(&dbf->san_lock);
spin_lock_init(&dbf->scsi_lock);
spin_lock_init(&dbf->rec_lock);
/* debug feature area which records recovery activity */ /* debug feature area which records recovery activity */
sprintf(dbf_name, "zfcp_%s_rec", dev_name(&adapter->ccw_device->dev)); sprintf(dbf_name, "zfcp_%s_rec", dev_name(&adapter->ccw_device->dev));
dbf->rec_dbf = zfcp_dbf_reg(dbf_name, 3, &zfcp_rec_dbf_view, dbf->rec = zfcp_dbf_reg(dbf_name, 3, &zfcp_dbf_rec_view,
sizeof(struct zfcp_rec_dbf_record)); sizeof(struct zfcp_dbf_rec_record));
if (!dbf->rec_dbf) if (!dbf->rec)
goto fail_rec; goto err_out;
/* debug feature area which records HBA (FSF and QDIO) conditions */ /* debug feature area which records HBA (FSF and QDIO) conditions */
sprintf(dbf_name, "zfcp_%s_hba", dev_name(&adapter->ccw_device->dev)); sprintf(dbf_name, "zfcp_%s_hba", dev_name(&adapter->ccw_device->dev));
dbf->hba_dbf = zfcp_dbf_reg(dbf_name, 3, &zfcp_hba_dbf_view, dbf->hba = zfcp_dbf_reg(dbf_name, 3, &zfcp_dbf_hba_view,
sizeof(struct zfcp_hba_dbf_record)); sizeof(struct zfcp_dbf_hba_record));
if (!dbf->hba_dbf) if (!dbf->hba)
goto fail_hba; goto err_out;
/* debug feature area which records SAN command failures and recovery */ /* debug feature area which records SAN command failures and recovery */
sprintf(dbf_name, "zfcp_%s_san", dev_name(&adapter->ccw_device->dev)); sprintf(dbf_name, "zfcp_%s_san", dev_name(&adapter->ccw_device->dev));
dbf->san_dbf = zfcp_dbf_reg(dbf_name, 6, &zfcp_san_dbf_view, dbf->san = zfcp_dbf_reg(dbf_name, 6, &zfcp_dbf_san_view,
sizeof(struct zfcp_san_dbf_record)); sizeof(struct zfcp_dbf_san_record));
if (!dbf->san_dbf) if (!dbf->san)
goto fail_san; goto err_out;
/* debug feature area which records SCSI command failures and recovery */ /* debug feature area which records SCSI command failures and recovery */
sprintf(dbf_name, "zfcp_%s_scsi", dev_name(&adapter->ccw_device->dev)); sprintf(dbf_name, "zfcp_%s_scsi", dev_name(&adapter->ccw_device->dev));
dbf->scsi_dbf = zfcp_dbf_reg(dbf_name, 3, &zfcp_scsi_dbf_view, dbf->scsi = zfcp_dbf_reg(dbf_name, 3, &zfcp_dbf_scsi_view,
sizeof(struct zfcp_scsi_dbf_record)); sizeof(struct zfcp_dbf_scsi_record));
if (!dbf->scsi_dbf) if (!dbf->scsi)
goto fail_scsi; goto err_out;
adapter->dbf = dbf; adapter->dbf = dbf;
return 0; return 0;
fail_scsi: err_out:
debug_unregister(dbf->san_dbf); zfcp_dbf_adapter_unregister(dbf);
fail_san:
debug_unregister(dbf->hba_dbf);
fail_hba:
debug_unregister(dbf->rec_dbf);
fail_rec:
kfree(dbf);
return -ENOMEM; return -ENOMEM;
} }
/** /**
* zfcp_adapter_debug_unregister - unregisters debug feature for an adapter * zfcp_adapter_debug_unregister - unregisters debug feature for an adapter
* @adapter: pointer to adapter for which debug features should be unregistered * @dbf: pointer to dbf for which debug features should be unregistered
*/ */
void zfcp_adapter_debug_unregister(struct zfcp_adapter *adapter) void zfcp_dbf_adapter_unregister(struct zfcp_dbf *dbf)
{ {
debug_unregister(adapter->dbf->scsi_dbf); debug_unregister(dbf->scsi);
debug_unregister(adapter->dbf->san_dbf); debug_unregister(dbf->san);
debug_unregister(adapter->dbf->hba_dbf); debug_unregister(dbf->hba);
debug_unregister(adapter->dbf->rec_dbf); debug_unregister(dbf->rec);
kfree(adapter->dbf); dbf->adapter->dbf = NULL;
adapter->dbf = NULL; kfree(dbf);
} }

View File

@ -37,13 +37,13 @@ struct zfcp_dbf_dump {
u8 data[]; /* dump data */ u8 data[]; /* dump data */
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_rec_dbf_record_thread { struct zfcp_dbf_rec_record_thread {
u32 total; u32 total;
u32 ready; u32 ready;
u32 running; u32 running;
}; };
struct zfcp_rec_dbf_record_target { struct zfcp_dbf_rec_record_target {
u64 ref; u64 ref;
u32 status; u32 status;
u32 d_id; u32 d_id;
@ -52,7 +52,7 @@ struct zfcp_rec_dbf_record_target {
u32 erp_count; u32 erp_count;
}; };
struct zfcp_rec_dbf_record_trigger { struct zfcp_dbf_rec_record_trigger {
u8 want; u8 want;
u8 need; u8 need;
u32 as; u32 as;
@ -64,21 +64,21 @@ struct zfcp_rec_dbf_record_trigger {
u64 fcp_lun; u64 fcp_lun;
}; };
struct zfcp_rec_dbf_record_action { struct zfcp_dbf_rec_record_action {
u32 status; u32 status;
u32 step; u32 step;
u64 action; u64 action;
u64 fsf_req; u64 fsf_req;
}; };
struct zfcp_rec_dbf_record { struct zfcp_dbf_rec_record {
u8 id; u8 id;
char id2[7]; char id2[7];
union { union {
struct zfcp_rec_dbf_record_action action; struct zfcp_dbf_rec_record_action action;
struct zfcp_rec_dbf_record_thread thread; struct zfcp_dbf_rec_record_thread thread;
struct zfcp_rec_dbf_record_target target; struct zfcp_dbf_rec_record_target target;
struct zfcp_rec_dbf_record_trigger trigger; struct zfcp_dbf_rec_record_trigger trigger;
} u; } u;
}; };
@ -89,7 +89,7 @@ enum {
ZFCP_REC_DBF_ID_TRIGGER, ZFCP_REC_DBF_ID_TRIGGER,
}; };
struct zfcp_hba_dbf_record_response { struct zfcp_dbf_hba_record_response {
u32 fsf_command; u32 fsf_command;
u64 fsf_reqid; u64 fsf_reqid;
u32 fsf_seqno; u32 fsf_seqno;
@ -127,7 +127,7 @@ struct zfcp_hba_dbf_record_response {
} u; } u;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_hba_dbf_record_status { struct zfcp_dbf_hba_record_status {
u8 failed; u8 failed;
u32 status_type; u32 status_type;
u32 status_subtype; u32 status_subtype;
@ -141,24 +141,24 @@ struct zfcp_hba_dbf_record_status {
u8 payload[ZFCP_DBF_UNSOL_PAYLOAD]; u8 payload[ZFCP_DBF_UNSOL_PAYLOAD];
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_hba_dbf_record_qdio { struct zfcp_dbf_hba_record_qdio {
u32 qdio_error; u32 qdio_error;
u8 sbal_index; u8 sbal_index;
u8 sbal_count; u8 sbal_count;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_hba_dbf_record { struct zfcp_dbf_hba_record {
u8 tag[ZFCP_DBF_TAG_SIZE]; u8 tag[ZFCP_DBF_TAG_SIZE];
u8 tag2[ZFCP_DBF_TAG_SIZE]; u8 tag2[ZFCP_DBF_TAG_SIZE];
union { union {
struct zfcp_hba_dbf_record_response response; struct zfcp_dbf_hba_record_response response;
struct zfcp_hba_dbf_record_status status; struct zfcp_dbf_hba_record_status status;
struct zfcp_hba_dbf_record_qdio qdio; struct zfcp_dbf_hba_record_qdio qdio;
struct fsf_bit_error_payload berr; struct fsf_bit_error_payload berr;
} u; } u;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_san_dbf_record_ct_request { struct zfcp_dbf_san_record_ct_request {
u16 cmd_req_code; u16 cmd_req_code;
u8 revision; u8 revision;
u8 gs_type; u8 gs_type;
@ -168,7 +168,7 @@ struct zfcp_san_dbf_record_ct_request {
u32 len; u32 len;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_san_dbf_record_ct_response { struct zfcp_dbf_san_record_ct_response {
u16 cmd_rsp_code; u16 cmd_rsp_code;
u8 revision; u8 revision;
u8 reason_code; u8 reason_code;
@ -178,27 +178,27 @@ struct zfcp_san_dbf_record_ct_response {
u32 len; u32 len;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_san_dbf_record_els { struct zfcp_dbf_san_record_els {
u8 ls_code; u8 ls_code;
u32 len; u32 len;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_san_dbf_record { struct zfcp_dbf_san_record {
u8 tag[ZFCP_DBF_TAG_SIZE]; u8 tag[ZFCP_DBF_TAG_SIZE];
u64 fsf_reqid; u64 fsf_reqid;
u32 fsf_seqno; u32 fsf_seqno;
u32 s_id; u32 s_id;
u32 d_id; u32 d_id;
union { union {
struct zfcp_san_dbf_record_ct_request ct_req; struct zfcp_dbf_san_record_ct_request ct_req;
struct zfcp_san_dbf_record_ct_response ct_resp; struct zfcp_dbf_san_record_ct_response ct_resp;
struct zfcp_san_dbf_record_els els; struct zfcp_dbf_san_record_els els;
} u; } u;
#define ZFCP_DBF_SAN_MAX_PAYLOAD 1024 #define ZFCP_DBF_SAN_MAX_PAYLOAD 1024
u8 payload[32]; u8 payload[32];
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_scsi_dbf_record { struct zfcp_dbf_scsi_record {
u8 tag[ZFCP_DBF_TAG_SIZE]; u8 tag[ZFCP_DBF_TAG_SIZE];
u8 tag2[ZFCP_DBF_TAG_SIZE]; u8 tag2[ZFCP_DBF_TAG_SIZE];
u32 scsi_id; u32 scsi_id;
@ -225,86 +225,84 @@ struct zfcp_scsi_dbf_record {
} __attribute__ ((packed)); } __attribute__ ((packed));
struct zfcp_dbf { struct zfcp_dbf {
debug_info_t *rec_dbf; debug_info_t *rec;
debug_info_t *hba_dbf; debug_info_t *hba;
debug_info_t *san_dbf; debug_info_t *san;
debug_info_t *scsi_dbf; debug_info_t *scsi;
spinlock_t rec_dbf_lock; spinlock_t rec_lock;
spinlock_t hba_dbf_lock; spinlock_t hba_lock;
spinlock_t san_dbf_lock; spinlock_t san_lock;
spinlock_t scsi_dbf_lock; spinlock_t scsi_lock;
struct zfcp_rec_dbf_record rec_dbf_buf; struct zfcp_dbf_rec_record rec_buf;
struct zfcp_hba_dbf_record hba_dbf_buf; struct zfcp_dbf_hba_record hba_buf;
struct zfcp_san_dbf_record san_dbf_buf; struct zfcp_dbf_san_record san_buf;
struct zfcp_scsi_dbf_record scsi_dbf_buf; struct zfcp_dbf_scsi_record scsi_buf;
struct zfcp_adapter *adapter;
}; };
static inline static inline
void zfcp_hba_dbf_event_fsf_resp(const char *tag2, int level, void zfcp_dbf_hba_fsf_resp(const char *tag2, int level,
struct zfcp_fsf_req *req, struct zfcp_dbf *dbf) struct zfcp_fsf_req *req, struct zfcp_dbf *dbf)
{ {
if (level <= dbf->hba_dbf->level) if (level <= dbf->hba->level)
_zfcp_hba_dbf_event_fsf_response(tag2, level, req, dbf); _zfcp_dbf_hba_fsf_response(tag2, level, req, dbf);
} }
/** /**
* zfcp_hba_dbf_event_fsf_response - trace event for request completion * zfcp_dbf_hba_fsf_response - trace event for request completion
* @fsf_req: request that has been completed * @fsf_req: request that has been completed
*/ */
static inline void zfcp_hba_dbf_event_fsf_response(struct zfcp_fsf_req *req) static inline void zfcp_dbf_hba_fsf_response(struct zfcp_fsf_req *req)
{ {
struct zfcp_dbf *dbf = req->adapter->dbf; struct zfcp_dbf *dbf = req->adapter->dbf;
struct fsf_qtcb *qtcb = req->qtcb; struct fsf_qtcb *qtcb = req->qtcb;
if ((qtcb->prefix.prot_status != FSF_PROT_GOOD) && if ((qtcb->prefix.prot_status != FSF_PROT_GOOD) &&
(qtcb->prefix.prot_status != FSF_PROT_FSF_STATUS_PRESENTED)) { (qtcb->prefix.prot_status != FSF_PROT_FSF_STATUS_PRESENTED)) {
zfcp_hba_dbf_event_fsf_resp("perr", 1, req, dbf); zfcp_dbf_hba_fsf_resp("perr", 1, req, dbf);
} else if (qtcb->header.fsf_status != FSF_GOOD) { } else if (qtcb->header.fsf_status != FSF_GOOD) {
zfcp_hba_dbf_event_fsf_resp("ferr", 1, req, dbf); zfcp_dbf_hba_fsf_resp("ferr", 1, req, dbf);
} else if ((req->fsf_command == FSF_QTCB_OPEN_PORT_WITH_DID) || } else if ((req->fsf_command == FSF_QTCB_OPEN_PORT_WITH_DID) ||
(req->fsf_command == FSF_QTCB_OPEN_LUN)) { (req->fsf_command == FSF_QTCB_OPEN_LUN)) {
zfcp_hba_dbf_event_fsf_resp("open", 4, req, dbf); zfcp_dbf_hba_fsf_resp("open", 4, req, dbf);
} else if (qtcb->header.log_length) { } else if (qtcb->header.log_length) {
zfcp_hba_dbf_event_fsf_resp("qtcb", 5, req, dbf); zfcp_dbf_hba_fsf_resp("qtcb", 5, req, dbf);
} else { } else {
zfcp_hba_dbf_event_fsf_resp("norm", 6, req, dbf); zfcp_dbf_hba_fsf_resp("norm", 6, req, dbf);
} }
} }
/** /**
* zfcp_hba_dbf_event_fsf_unsol - trace event for an unsolicited status buffer * zfcp_dbf_hba_fsf_unsol - trace event for an unsolicited status buffer
* @tag: tag indicating which kind of unsolicited status has been received * @tag: tag indicating which kind of unsolicited status has been received
* @adapter: adapter that has issued the unsolicited status buffer * @dbf: reference to dbf structure
* @status_buffer: buffer containing payload of unsolicited status * @status_buffer: buffer containing payload of unsolicited status
*/ */
static inline static inline
void zfcp_hba_dbf_event_fsf_unsol(const char *tag, struct zfcp_adapter *adapter, void zfcp_dbf_hba_fsf_unsol(const char *tag, struct zfcp_dbf *dbf,
struct fsf_status_read_buffer *buf) struct fsf_status_read_buffer *buf)
{ {
struct zfcp_dbf *dbf = adapter->dbf;
int level = 2; int level = 2;
if (level <= dbf->hba_dbf->level) if (level <= dbf->hba->level)
_zfcp_hba_dbf_event_fsf_unsol(tag, level, adapter, buf); _zfcp_dbf_hba_fsf_unsol(tag, level, dbf, buf);
} }
static inline static inline
void zfcp_scsi_dbf_event(const char *tag, const char *tag2, int level, void zfcp_dbf_scsi(const char *tag, const char *tag2, int level,
struct zfcp_adapter *adapter, struct scsi_cmnd *scmd, struct zfcp_dbf *dbf, struct scsi_cmnd *scmd,
struct zfcp_fsf_req *req, unsigned long old_id) struct zfcp_fsf_req *req, unsigned long old_id)
{ {
struct zfcp_dbf *dbf = adapter->dbf; if (level <= dbf->scsi->level)
_zfcp_dbf_scsi(tag, tag2, level, dbf, scmd, req, old_id);
if (level <= dbf->scsi_dbf->level)
_zfcp_scsi_dbf_event(tag, tag2, level, dbf, scmd, req, old_id);
} }
/** /**
* zfcp_scsi_dbf_event_result - trace event for SCSI command completion * zfcp_dbf_scsi_result - trace event for SCSI command completion
* @tag: tag indicating success or failure of SCSI command * @tag: tag indicating success or failure of SCSI command
* @level: trace level applicable for this event * @level: trace level applicable for this event
* @adapter: adapter that has been used to issue the SCSI command * @adapter: adapter that has been used to issue the SCSI command
@ -312,16 +310,14 @@ void zfcp_scsi_dbf_event(const char *tag, const char *tag2, int level,
* @fsf_req: request used to issue SCSI command (might be NULL) * @fsf_req: request used to issue SCSI command (might be NULL)
*/ */
static inline static inline
void zfcp_scsi_dbf_event_result(const char *tag, int level, void zfcp_dbf_scsi_result(const char *tag, int level, struct zfcp_dbf *dbf,
struct zfcp_adapter *adapter, struct scsi_cmnd *scmd, struct zfcp_fsf_req *fsf_req)
struct scsi_cmnd *scmd,
struct zfcp_fsf_req *fsf_req)
{ {
zfcp_scsi_dbf_event("rslt", tag, level, adapter, scmd, fsf_req, 0); zfcp_dbf_scsi("rslt", tag, level, dbf, scmd, fsf_req, 0);
} }
/** /**
* zfcp_scsi_dbf_event_abort - trace event for SCSI command abort * zfcp_dbf_scsi_abort - trace event for SCSI command abort
* @tag: tag indicating success or failure of abort operation * @tag: tag indicating success or failure of abort operation
* @adapter: adapter thas has been used to issue SCSI command to be aborted * @adapter: adapter thas has been used to issue SCSI command to be aborted
* @scmd: SCSI command to be aborted * @scmd: SCSI command to be aborted
@ -329,28 +325,26 @@ void zfcp_scsi_dbf_event_result(const char *tag, int level,
* @old_id: identifier of request containg SCSI command to be aborted * @old_id: identifier of request containg SCSI command to be aborted
*/ */
static inline static inline
void zfcp_scsi_dbf_event_abort(const char *tag, struct zfcp_adapter *adapter, void zfcp_dbf_scsi_abort(const char *tag, struct zfcp_dbf *dbf,
struct scsi_cmnd *scmd, struct scsi_cmnd *scmd, struct zfcp_fsf_req *new_req,
struct zfcp_fsf_req *new_req, unsigned long old_id)
unsigned long old_id)
{ {
zfcp_scsi_dbf_event("abrt", tag, 1, adapter, scmd, new_req, old_id); zfcp_dbf_scsi("abrt", tag, 1, dbf, scmd, new_req, old_id);
} }
/** /**
* zfcp_scsi_dbf_event_devreset - trace event for Logical Unit or Target Reset * zfcp_dbf_scsi_devreset - trace event for Logical Unit or Target Reset
* @tag: tag indicating success or failure of reset operation * @tag: tag indicating success or failure of reset operation
* @flag: indicates type of reset (Target Reset, Logical Unit Reset) * @flag: indicates type of reset (Target Reset, Logical Unit Reset)
* @unit: unit that needs reset * @unit: unit that needs reset
* @scsi_cmnd: SCSI command which caused this error recovery * @scsi_cmnd: SCSI command which caused this error recovery
*/ */
static inline static inline
void zfcp_scsi_dbf_event_devreset(const char *tag, u8 flag, void zfcp_dbf_scsi_devreset(const char *tag, u8 flag, struct zfcp_unit *unit,
struct zfcp_unit *unit, struct scsi_cmnd *scsi_cmnd)
struct scsi_cmnd *scsi_cmnd)
{ {
zfcp_scsi_dbf_event(flag == FCP_TARGET_RESET ? "trst" : "lrst", tag, 1, zfcp_dbf_scsi(flag == FCP_TARGET_RESET ? "trst" : "lrst", tag, 1,
unit->port->adapter, scsi_cmnd, NULL, 0); unit->port->adapter->dbf, scsi_cmnd, NULL, 0);
} }
#endif /* ZFCP_DBF_H */ #endif /* ZFCP_DBF_H */

View File

@ -74,9 +74,9 @@ static void zfcp_erp_action_ready(struct zfcp_erp_action *act)
struct zfcp_adapter *adapter = act->adapter; struct zfcp_adapter *adapter = act->adapter;
list_move(&act->list, &act->adapter->erp_ready_head); list_move(&act->list, &act->adapter->erp_ready_head);
zfcp_rec_dbf_event_action("erardy1", act); zfcp_dbf_rec_action("erardy1", act);
up(&adapter->erp_ready_sem); up(&adapter->erp_ready_sem);
zfcp_rec_dbf_event_thread("erardy2", adapter); zfcp_dbf_rec_thread("erardy2", adapter->dbf);
} }
static void zfcp_erp_action_dismiss(struct zfcp_erp_action *act) static void zfcp_erp_action_dismiss(struct zfcp_erp_action *act)
@ -227,11 +227,10 @@ static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
++adapter->erp_total_count; ++adapter->erp_total_count;
list_add_tail(&act->list, &adapter->erp_ready_head); list_add_tail(&act->list, &adapter->erp_ready_head);
up(&adapter->erp_ready_sem); up(&adapter->erp_ready_sem);
zfcp_rec_dbf_event_thread("eracte1", adapter); zfcp_dbf_rec_thread("eracte1", adapter->dbf);
retval = 0; retval = 0;
out: out:
zfcp_rec_dbf_event_trigger(id, ref, want, need, act, zfcp_dbf_rec_trigger(id, ref, want, need, act, adapter, port, unit);
adapter, port, unit);
return retval; return retval;
} }
@ -442,28 +441,28 @@ static int status_change_clear(unsigned long mask, atomic_t *status)
static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter) static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter)
{ {
if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status)) if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status))
zfcp_rec_dbf_event_adapter("eraubl1", NULL, adapter); zfcp_dbf_rec_adapter("eraubl1", NULL, adapter->dbf);
atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status); atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status);
} }
static void zfcp_erp_port_unblock(struct zfcp_port *port) static void zfcp_erp_port_unblock(struct zfcp_port *port)
{ {
if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status)) if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status))
zfcp_rec_dbf_event_port("erpubl1", NULL, port); zfcp_dbf_rec_port("erpubl1", NULL, port);
atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status); atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status);
} }
static void zfcp_erp_unit_unblock(struct zfcp_unit *unit) static void zfcp_erp_unit_unblock(struct zfcp_unit *unit)
{ {
if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status)) if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status))
zfcp_rec_dbf_event_unit("eruubl1", NULL, unit); zfcp_dbf_rec_unit("eruubl1", NULL, unit);
atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status); atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status);
} }
static void zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action) static void zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
{ {
list_move(&erp_action->list, &erp_action->adapter->erp_running_head); list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
zfcp_rec_dbf_event_action("erator1", erp_action); zfcp_dbf_rec_action("erator1", erp_action);
} }
static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act) static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act)
@ -479,11 +478,11 @@ static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act)
if (act->status & (ZFCP_STATUS_ERP_DISMISSED | if (act->status & (ZFCP_STATUS_ERP_DISMISSED |
ZFCP_STATUS_ERP_TIMEDOUT)) { ZFCP_STATUS_ERP_TIMEDOUT)) {
act->fsf_req->status |= ZFCP_STATUS_FSFREQ_DISMISSED; act->fsf_req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
zfcp_rec_dbf_event_action("erscf_1", act); zfcp_dbf_rec_action("erscf_1", act);
act->fsf_req->erp_action = NULL; act->fsf_req->erp_action = NULL;
} }
if (act->status & ZFCP_STATUS_ERP_TIMEDOUT) if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
zfcp_rec_dbf_event_action("erscf_2", act); zfcp_dbf_rec_action("erscf_2", act);
if (act->fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED) if (act->fsf_req->status & ZFCP_STATUS_FSFREQ_DISMISSED)
act->fsf_req = NULL; act->fsf_req = NULL;
} else } else
@ -641,9 +640,9 @@ static int zfcp_erp_adapter_strat_fsf_xconf(struct zfcp_erp_action *erp_action)
return ZFCP_ERP_FAILED; return ZFCP_ERP_FAILED;
} }
zfcp_rec_dbf_event_thread_lock("erasfx1", adapter); zfcp_dbf_rec_thread_lock("erasfx1", adapter->dbf);
down(&adapter->erp_ready_sem); down(&adapter->erp_ready_sem);
zfcp_rec_dbf_event_thread_lock("erasfx2", adapter); zfcp_dbf_rec_thread_lock("erasfx2", adapter->dbf);
if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT)
break; break;
@ -682,9 +681,9 @@ static int zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *act)
if (ret) if (ret)
return ZFCP_ERP_FAILED; return ZFCP_ERP_FAILED;
zfcp_rec_dbf_event_thread_lock("erasox1", adapter); zfcp_dbf_rec_thread_lock("erasox1", adapter->dbf);
down(&adapter->erp_ready_sem); down(&adapter->erp_ready_sem);
zfcp_rec_dbf_event_thread_lock("erasox2", adapter); zfcp_dbf_rec_thread_lock("erasox2", adapter->dbf);
if (act->status & ZFCP_STATUS_ERP_TIMEDOUT) if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
return ZFCP_ERP_FAILED; return ZFCP_ERP_FAILED;
@ -1138,7 +1137,7 @@ static void zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
} }
list_del(&erp_action->list); list_del(&erp_action->list);
zfcp_rec_dbf_event_action("eractd1", erp_action); zfcp_dbf_rec_action("eractd1", erp_action);
switch (erp_action->action) { switch (erp_action->action) {
case ZFCP_ERP_ACTION_REOPEN_UNIT: case ZFCP_ERP_ACTION_REOPEN_UNIT:
@ -1297,9 +1296,9 @@ static int zfcp_erp_thread(void *data)
while (!(atomic_read(&adapter->status) & while (!(atomic_read(&adapter->status) &
ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL)) { ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL)) {
zfcp_rec_dbf_event_thread_lock("erthrd1", adapter); zfcp_dbf_rec_thread_lock("erthrd1", adapter->dbf);
ignore = down_interruptible(&adapter->erp_ready_sem); ignore = down_interruptible(&adapter->erp_ready_sem);
zfcp_rec_dbf_event_thread_lock("erthrd2", adapter); zfcp_dbf_rec_thread_lock("erthrd2", adapter->dbf);
write_lock_irqsave(&adapter->erp_lock, flags); write_lock_irqsave(&adapter->erp_lock, flags);
next = adapter->erp_ready_head.next; next = adapter->erp_ready_head.next;
@ -1356,7 +1355,7 @@ void zfcp_erp_thread_kill(struct zfcp_adapter *adapter)
{ {
atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL, &adapter->status); atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_THREAD_KILL, &adapter->status);
up(&adapter->erp_ready_sem); up(&adapter->erp_ready_sem);
zfcp_rec_dbf_event_thread_lock("erthrk1", adapter); zfcp_dbf_rec_thread_lock("erthrk1", adapter->dbf);
wait_event(adapter->erp_thread_wqh, wait_event(adapter->erp_thread_wqh,
!(atomic_read(&adapter->status) & !(atomic_read(&adapter->status) &
@ -1431,11 +1430,11 @@ void zfcp_erp_modify_adapter_status(struct zfcp_adapter *adapter, char *id,
if (set_or_clear == ZFCP_SET) { if (set_or_clear == ZFCP_SET) {
if (status_change_set(mask, &adapter->status)) if (status_change_set(mask, &adapter->status))
zfcp_rec_dbf_event_adapter(id, ref, adapter); zfcp_dbf_rec_adapter(id, ref, adapter->dbf);
atomic_set_mask(mask, &adapter->status); atomic_set_mask(mask, &adapter->status);
} else { } else {
if (status_change_clear(mask, &adapter->status)) if (status_change_clear(mask, &adapter->status))
zfcp_rec_dbf_event_adapter(id, ref, adapter); zfcp_dbf_rec_adapter(id, ref, adapter->dbf);
atomic_clear_mask(mask, &adapter->status); atomic_clear_mask(mask, &adapter->status);
if (mask & ZFCP_STATUS_COMMON_ERP_FAILED) if (mask & ZFCP_STATUS_COMMON_ERP_FAILED)
atomic_set(&adapter->erp_counter, 0); atomic_set(&adapter->erp_counter, 0);
@ -1465,11 +1464,11 @@ void zfcp_erp_modify_port_status(struct zfcp_port *port, char *id, void *ref,
if (set_or_clear == ZFCP_SET) { if (set_or_clear == ZFCP_SET) {
if (status_change_set(mask, &port->status)) if (status_change_set(mask, &port->status))
zfcp_rec_dbf_event_port(id, ref, port); zfcp_dbf_rec_port(id, ref, port);
atomic_set_mask(mask, &port->status); atomic_set_mask(mask, &port->status);
} else { } else {
if (status_change_clear(mask, &port->status)) if (status_change_clear(mask, &port->status))
zfcp_rec_dbf_event_port(id, ref, port); zfcp_dbf_rec_port(id, ref, port);
atomic_clear_mask(mask, &port->status); atomic_clear_mask(mask, &port->status);
if (mask & ZFCP_STATUS_COMMON_ERP_FAILED) if (mask & ZFCP_STATUS_COMMON_ERP_FAILED)
atomic_set(&port->erp_counter, 0); atomic_set(&port->erp_counter, 0);
@ -1494,11 +1493,11 @@ void zfcp_erp_modify_unit_status(struct zfcp_unit *unit, char *id, void *ref,
{ {
if (set_or_clear == ZFCP_SET) { if (set_or_clear == ZFCP_SET) {
if (status_change_set(mask, &unit->status)) if (status_change_set(mask, &unit->status))
zfcp_rec_dbf_event_unit(id, ref, unit); zfcp_dbf_rec_unit(id, ref, unit);
atomic_set_mask(mask, &unit->status); atomic_set_mask(mask, &unit->status);
} else { } else {
if (status_change_clear(mask, &unit->status)) if (status_change_clear(mask, &unit->status))
zfcp_rec_dbf_event_unit(id, ref, unit); zfcp_dbf_rec_unit(id, ref, unit);
atomic_clear_mask(mask, &unit->status); atomic_clear_mask(mask, &unit->status);
if (mask & ZFCP_STATUS_COMMON_ERP_FAILED) { if (mask & ZFCP_STATUS_COMMON_ERP_FAILED) {
atomic_set(&unit->erp_counter, 0); atomic_set(&unit->erp_counter, 0);

View File

@ -34,35 +34,31 @@ extern struct zfcp_adapter *zfcp_get_adapter_by_busid(char *);
extern struct miscdevice zfcp_cfdc_misc; extern struct miscdevice zfcp_cfdc_misc;
/* zfcp_dbf.c */ /* zfcp_dbf.c */
extern int zfcp_adapter_debug_register(struct zfcp_adapter *); extern int zfcp_dbf_adapter_register(struct zfcp_adapter *);
extern void zfcp_adapter_debug_unregister(struct zfcp_adapter *); extern void zfcp_dbf_adapter_unregister(struct zfcp_dbf *);
extern void zfcp_rec_dbf_event_thread(char *, struct zfcp_adapter *); extern void zfcp_dbf_rec_thread(char *, struct zfcp_dbf *);
extern void zfcp_rec_dbf_event_thread_lock(char *, struct zfcp_adapter *); extern void zfcp_dbf_rec_thread_lock(char *, struct zfcp_dbf *);
extern void zfcp_rec_dbf_event_adapter(char *, void *, struct zfcp_adapter *); extern void zfcp_dbf_rec_adapter(char *, void *, struct zfcp_dbf *);
extern void zfcp_rec_dbf_event_port(char *, void *, struct zfcp_port *); extern void zfcp_dbf_rec_port(char *, void *, struct zfcp_port *);
extern void zfcp_rec_dbf_event_unit(char *, void *, struct zfcp_unit *); extern void zfcp_dbf_rec_unit(char *, void *, struct zfcp_unit *);
extern void zfcp_rec_dbf_event_trigger(char *, void *, u8, u8, void *, extern void zfcp_dbf_rec_trigger(char *, void *, u8, u8, void *,
struct zfcp_adapter *, struct zfcp_adapter *, struct zfcp_port *,
struct zfcp_port *, struct zfcp_unit *); struct zfcp_unit *);
extern void zfcp_rec_dbf_event_action(char *, struct zfcp_erp_action *); extern void zfcp_dbf_rec_action(char *, struct zfcp_erp_action *);
extern void _zfcp_hba_dbf_event_fsf_response(const char *, int level, extern void _zfcp_dbf_hba_fsf_response(const char *, int, struct zfcp_fsf_req *,
struct zfcp_fsf_req *, struct zfcp_dbf *);
struct zfcp_dbf *dbf); extern void _zfcp_dbf_hba_fsf_unsol(const char *, int level, struct zfcp_dbf *,
extern void _zfcp_hba_dbf_event_fsf_unsol(const char *, int level,
struct zfcp_adapter *,
struct fsf_status_read_buffer *); struct fsf_status_read_buffer *);
extern void zfcp_hba_dbf_event_qdio(struct zfcp_qdio *, unsigned int, int, extern void zfcp_dbf_hba_qdio(struct zfcp_dbf *, unsigned int, int, int);
int); extern void zfcp_dbf_hba_berr(struct zfcp_dbf *, struct zfcp_fsf_req *);
extern void zfcp_hba_dbf_event_berr(struct zfcp_adapter *, extern void zfcp_dbf_san_ct_request(struct zfcp_fsf_req *);
struct zfcp_fsf_req *); extern void zfcp_dbf_san_ct_response(struct zfcp_fsf_req *);
extern void zfcp_san_dbf_event_ct_request(struct zfcp_fsf_req *); extern void zfcp_dbf_san_els_request(struct zfcp_fsf_req *);
extern void zfcp_san_dbf_event_ct_response(struct zfcp_fsf_req *); extern void zfcp_dbf_san_els_response(struct zfcp_fsf_req *);
extern void zfcp_san_dbf_event_els_request(struct zfcp_fsf_req *); extern void zfcp_dbf_san_incoming_els(struct zfcp_fsf_req *);
extern void zfcp_san_dbf_event_els_response(struct zfcp_fsf_req *); extern void _zfcp_dbf_scsi(const char *, const char *, int, struct zfcp_dbf *,
extern void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *); struct scsi_cmnd *, struct zfcp_fsf_req *,
extern void _zfcp_scsi_dbf_event(const char *, const char *, int, unsigned long);
struct zfcp_dbf *, struct scsi_cmnd *,
struct zfcp_fsf_req *, unsigned long);
/* zfcp_erp.c */ /* zfcp_erp.c */
extern void zfcp_erp_modify_adapter_status(struct zfcp_adapter *, char *, extern void zfcp_erp_modify_adapter_status(struct zfcp_adapter *, char *,

View File

@ -242,7 +242,7 @@ void zfcp_fc_incoming_els(struct zfcp_fsf_req *fsf_req)
(struct fsf_status_read_buffer *) fsf_req->data; (struct fsf_status_read_buffer *) fsf_req->data;
unsigned int els_type = status_buffer->payload.data[0]; unsigned int els_type = status_buffer->payload.data[0];
zfcp_san_dbf_event_incoming_els(fsf_req); zfcp_dbf_san_incoming_els(fsf_req);
if (els_type == LS_PLOGI) if (els_type == LS_PLOGI)
zfcp_fc_incoming_plogi(fsf_req); zfcp_fc_incoming_plogi(fsf_req);
else if (els_type == LS_LOGO) else if (els_type == LS_LOGO)

View File

@ -248,13 +248,13 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
struct fsf_status_read_buffer *sr_buf = req->data; struct fsf_status_read_buffer *sr_buf = req->data;
if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
zfcp_hba_dbf_event_fsf_unsol("dism", adapter, sr_buf); zfcp_dbf_hba_fsf_unsol("dism", adapter->dbf, sr_buf);
mempool_free(sr_buf, adapter->pool.status_read_data); mempool_free(sr_buf, adapter->pool.status_read_data);
zfcp_fsf_req_free(req); zfcp_fsf_req_free(req);
return; return;
} }
zfcp_hba_dbf_event_fsf_unsol("read", adapter, sr_buf); zfcp_dbf_hba_fsf_unsol("read", adapter->dbf, sr_buf);
switch (sr_buf->status_type) { switch (sr_buf->status_type) {
case FSF_STATUS_READ_PORT_CLOSED: case FSF_STATUS_READ_PORT_CLOSED:
@ -269,7 +269,7 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req)
dev_warn(&adapter->ccw_device->dev, dev_warn(&adapter->ccw_device->dev,
"The error threshold for checksum statistics " "The error threshold for checksum statistics "
"has been exceeded\n"); "has been exceeded\n");
zfcp_hba_dbf_event_berr(adapter, req); zfcp_dbf_hba_berr(adapter->dbf, req);
break; break;
case FSF_STATUS_READ_LINK_DOWN: case FSF_STATUS_READ_LINK_DOWN:
zfcp_fsf_status_read_link_down(req); zfcp_fsf_status_read_link_down(req);
@ -355,7 +355,7 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req)
struct fsf_qtcb *qtcb = req->qtcb; struct fsf_qtcb *qtcb = req->qtcb;
union fsf_prot_status_qual *psq = &qtcb->prefix.prot_status_qual; union fsf_prot_status_qual *psq = &qtcb->prefix.prot_status_qual;
zfcp_hba_dbf_event_fsf_response(req); zfcp_dbf_hba_fsf_response(req);
if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) { if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED) {
req->status |= ZFCP_STATUS_FSFREQ_ERROR | req->status |= ZFCP_STATUS_FSFREQ_ERROR |
@ -848,7 +848,7 @@ failed_req_send:
mempool_free(sr_buf, adapter->pool.status_read_data); mempool_free(sr_buf, adapter->pool.status_read_data);
failed_buf: failed_buf:
zfcp_fsf_req_free(req); zfcp_fsf_req_free(req);
zfcp_hba_dbf_event_fsf_unsol("fail", adapter, NULL); zfcp_dbf_hba_fsf_unsol("fail", adapter->dbf, NULL);
out: out:
spin_unlock_bh(&qdio->req_q_lock); spin_unlock_bh(&qdio->req_q_lock);
return retval; return retval;
@ -968,7 +968,7 @@ static void zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *req)
switch (header->fsf_status) { switch (header->fsf_status) {
case FSF_GOOD: case FSF_GOOD:
zfcp_san_dbf_event_ct_response(req); zfcp_dbf_san_ct_response(req);
send_ct->status = 0; send_ct->status = 0;
break; break;
case FSF_SERVICE_CLASS_NOT_SUPPORTED: case FSF_SERVICE_CLASS_NOT_SUPPORTED:
@ -1100,7 +1100,7 @@ int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool)
req->qtcb->bottom.support.timeout = ct->timeout; req->qtcb->bottom.support.timeout = ct->timeout;
req->data = ct; req->data = ct;
zfcp_san_dbf_event_ct_request(req); zfcp_dbf_san_ct_request(req);
zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
ret = zfcp_fsf_req_send(req); ret = zfcp_fsf_req_send(req);
@ -1129,7 +1129,7 @@ static void zfcp_fsf_send_els_handler(struct zfcp_fsf_req *req)
switch (header->fsf_status) { switch (header->fsf_status) {
case FSF_GOOD: case FSF_GOOD:
zfcp_san_dbf_event_els_response(req); zfcp_dbf_san_els_response(req);
send_els->status = 0; send_els->status = 0;
break; break;
case FSF_SERVICE_CLASS_NOT_SUPPORTED: case FSF_SERVICE_CLASS_NOT_SUPPORTED:
@ -1203,7 +1203,7 @@ int zfcp_fsf_send_els(struct zfcp_send_els *els)
bottom->timeout = 2 * R_A_TOV; bottom->timeout = 2 * R_A_TOV;
req->data = els; req->data = els;
zfcp_san_dbf_event_els_request(req); zfcp_dbf_san_els_request(req);
zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT); zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
ret = zfcp_fsf_req_send(req); ret = zfcp_fsf_req_send(req);
@ -2213,11 +2213,11 @@ static void zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *req)
} }
skip_fsfstatus: skip_fsfstatus:
if (scpnt->result != 0) if (scpnt->result != 0)
zfcp_scsi_dbf_event_result("erro", 3, req->adapter, scpnt, req); zfcp_dbf_scsi_result("erro", 3, req->adapter->dbf, scpnt, req);
else if (scpnt->retries > 0) else if (scpnt->retries > 0)
zfcp_scsi_dbf_event_result("retr", 4, req->adapter, scpnt, req); zfcp_dbf_scsi_result("retr", 4, req->adapter->dbf, scpnt, req);
else else
zfcp_scsi_dbf_event_result("norm", 6, req->adapter, scpnt, req); zfcp_dbf_scsi_result("norm", 6, req->adapter->dbf, scpnt, req);
scpnt->host_scribble = NULL; scpnt->host_scribble = NULL;
(scpnt->scsi_done) (scpnt); (scpnt->scsi_done) (scpnt);

View File

@ -101,7 +101,8 @@ static void zfcp_qdio_int_req(struct ccw_device *cdev, unsigned int qdio_err,
struct zfcp_qdio_queue *queue = &qdio->req_q; struct zfcp_qdio_queue *queue = &qdio->req_q;
if (unlikely(qdio_err)) { if (unlikely(qdio_err)) {
zfcp_hba_dbf_event_qdio(qdio, qdio_err, first, count); zfcp_dbf_hba_qdio(qdio->adapter->dbf, qdio_err, first,
count);
zfcp_qdio_handler_error(qdio, "qdireq1"); zfcp_qdio_handler_error(qdio, "qdireq1");
return; return;
} }
@ -143,7 +144,8 @@ static void zfcp_qdio_int_resp(struct ccw_device *cdev, unsigned int qdio_err,
int sbal_idx, sbal_no; int sbal_idx, sbal_no;
if (unlikely(qdio_err)) { if (unlikely(qdio_err)) {
zfcp_hba_dbf_event_qdio(qdio, qdio_err, first, count); zfcp_dbf_hba_qdio(qdio->adapter->dbf, qdio_err, first,
count);
zfcp_qdio_handler_error(qdio, "qdires1"); zfcp_qdio_handler_error(qdio, "qdires1");
return; return;
} }

View File

@ -53,11 +53,11 @@ static int zfcp_scsi_slave_configure(struct scsi_device *sdp)
static void zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result) static void zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result)
{ {
struct zfcp_adapter *adapter =
(struct zfcp_adapter *) scpnt->device->host->hostdata[0];
set_host_byte(scpnt, result); set_host_byte(scpnt, result);
if ((scpnt->device != NULL) && (scpnt->device->host != NULL)) if ((scpnt->device != NULL) && (scpnt->device->host != NULL))
zfcp_scsi_dbf_event_result("fail", 4, zfcp_dbf_scsi_result("fail", 4, adapter->dbf, scpnt, NULL);
(struct zfcp_adapter*) scpnt->device->host->hostdata[0],
scpnt, NULL);
/* return directly */ /* return directly */
scpnt->scsi_done(scpnt); scpnt->scsi_done(scpnt);
} }
@ -93,7 +93,7 @@ static int zfcp_scsi_queuecommand(struct scsi_cmnd *scpnt,
scsi_result = fc_remote_port_chkready(rport); scsi_result = fc_remote_port_chkready(rport);
if (unlikely(scsi_result)) { if (unlikely(scsi_result)) {
scpnt->result = scsi_result; scpnt->result = scsi_result;
zfcp_scsi_dbf_event_result("fail", 4, adapter, scpnt, NULL); zfcp_dbf_scsi_result("fail", 4, adapter->dbf, scpnt, NULL);
scpnt->scsi_done(scpnt); scpnt->scsi_done(scpnt);
return 0; return 0;
} }
@ -181,8 +181,8 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
spin_unlock(&adapter->req_list_lock); spin_unlock(&adapter->req_list_lock);
if (!old_req) { if (!old_req) {
write_unlock_irqrestore(&adapter->abort_lock, flags); write_unlock_irqrestore(&adapter->abort_lock, flags);
zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, zfcp_dbf_scsi_abort("lte1", adapter->dbf, scpnt, NULL,
old_reqid); old_reqid);
return FAILED; /* completion could be in progress */ return FAILED; /* completion could be in progress */
} }
old_req->data = NULL; old_req->data = NULL;
@ -198,8 +198,8 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
zfcp_erp_wait(adapter); zfcp_erp_wait(adapter);
if (!(atomic_read(&adapter->status) & if (!(atomic_read(&adapter->status) &
ZFCP_STATUS_COMMON_RUNNING)) { ZFCP_STATUS_COMMON_RUNNING)) {
zfcp_scsi_dbf_event_abort("nres", adapter, scpnt, NULL, zfcp_dbf_scsi_abort("nres", adapter->dbf, scpnt, NULL,
old_reqid); old_reqid);
return SUCCESS; return SUCCESS;
} }
} }
@ -216,7 +216,7 @@ static int zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt)
dbf_tag = "fail"; dbf_tag = "fail";
retval = FAILED; retval = FAILED;
} }
zfcp_scsi_dbf_event_abort(dbf_tag, adapter, scpnt, abrt_req, old_reqid); zfcp_dbf_scsi_abort(dbf_tag, adapter->dbf, scpnt, abrt_req, old_reqid);
zfcp_fsf_req_free(abrt_req); zfcp_fsf_req_free(abrt_req);
return retval; return retval;
} }
@ -237,8 +237,7 @@ static int zfcp_task_mgmt_function(struct scsi_cmnd *scpnt, u8 tm_flags)
zfcp_erp_wait(adapter); zfcp_erp_wait(adapter);
if (!(atomic_read(&adapter->status) & if (!(atomic_read(&adapter->status) &
ZFCP_STATUS_COMMON_RUNNING)) { ZFCP_STATUS_COMMON_RUNNING)) {
zfcp_scsi_dbf_event_devreset("nres", tm_flags, unit, zfcp_dbf_scsi_devreset("nres", tm_flags, unit, scpnt);
scpnt);
return SUCCESS; return SUCCESS;
} }
} }
@ -248,13 +247,13 @@ static int zfcp_task_mgmt_function(struct scsi_cmnd *scpnt, u8 tm_flags)
wait_for_completion(&fsf_req->completion); wait_for_completion(&fsf_req->completion);
if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCFAILED) { if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCFAILED) {
zfcp_scsi_dbf_event_devreset("fail", tm_flags, unit, scpnt); zfcp_dbf_scsi_devreset("fail", tm_flags, unit, scpnt);
retval = FAILED; retval = FAILED;
} else if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP) { } else if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCNOTSUPP) {
zfcp_scsi_dbf_event_devreset("nsup", tm_flags, unit, scpnt); zfcp_dbf_scsi_devreset("nsup", tm_flags, unit, scpnt);
retval = FAILED; retval = FAILED;
} else } else
zfcp_scsi_dbf_event_devreset("okay", tm_flags, unit, scpnt); zfcp_dbf_scsi_devreset("okay", tm_flags, unit, scpnt);
zfcp_fsf_req_free(fsf_req); zfcp_fsf_req_free(fsf_req);
return retval; return retval;