Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 180004
b: refs/heads/master
c: f09d545
h: refs/heads/master
v: v3
  • Loading branch information
Christof Schmitt authored and James Bottomley committed Jan 17, 2010
1 parent 08b0b28 commit 5c1a4b0
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 22c24734ce5e7cee9a63e02e5aa7ed108f8fad4d
refs/heads/master: f09d5454576b9aabd4ce454937cd86263428090b
65 changes: 43 additions & 22 deletions trunk/drivers/s390/scsi/zfcp_fc.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,6 +677,44 @@ static void zfcp_fc_ct_els_job_handler(void *data)
job->job_done(job);
}

static struct zfcp_fc_wka_port *zfcp_fc_job_wka_port(struct fc_bsg_job *job)
{
u32 preamble_word1;
u8 gs_type;
struct zfcp_adapter *adapter;

preamble_word1 = job->request->rqst_data.r_ct.preamble_word1;
gs_type = (preamble_word1 & 0xff000000) >> 24;

adapter = (struct zfcp_adapter *) job->shost->hostdata[0];

switch (gs_type) {
case FC_FST_ALIAS:
return &adapter->gs->as;
case FC_FST_MGMT:
return &adapter->gs->ms;
case FC_FST_TIME:
return &adapter->gs->ts;
break;
case FC_FST_DIR:
return &adapter->gs->ds;
break;
default:
return NULL;
}
}

static void zfcp_fc_ct_job_handler(void *data)
{
struct fc_bsg_job *job = data;
struct zfcp_fc_wka_port *wka_port;

wka_port = zfcp_fc_job_wka_port(job);
zfcp_fc_wka_port_put(wka_port);

zfcp_fc_ct_els_job_handler(data);
}

static int zfcp_fc_exec_els_job(struct fc_bsg_job *job,
struct zfcp_adapter *adapter)
{
Expand All @@ -695,42 +733,26 @@ static int zfcp_fc_exec_els_job(struct fc_bsg_job *job,
} else
d_id = ntoh24(job->request->rqst_data.h_els.port_id);

els->handler = zfcp_fc_ct_els_job_handler;
return zfcp_fsf_send_els(adapter, d_id, els);
}

static int zfcp_fc_exec_ct_job(struct fc_bsg_job *job,
struct zfcp_adapter *adapter)
{
int ret;
u8 gs_type;
struct zfcp_fsf_ct_els *ct = job->dd_data;
struct zfcp_fc_wka_port *wka_port;
u32 preamble_word1;

preamble_word1 = job->request->rqst_data.r_ct.preamble_word1;
gs_type = (preamble_word1 & 0xff000000) >> 24;

switch (gs_type) {
case FC_FST_ALIAS:
wka_port = &adapter->gs->as;
break;
case FC_FST_MGMT:
wka_port = &adapter->gs->ms;
break;
case FC_FST_TIME:
wka_port = &adapter->gs->ts;
break;
case FC_FST_DIR:
wka_port = &adapter->gs->ds;
break;
default:
return -EINVAL; /* no such service */
}
wka_port = zfcp_fc_job_wka_port(job);
if (!wka_port)
return -EINVAL;

ret = zfcp_fc_wka_port_get(wka_port);
if (ret)
return ret;

ct->handler = zfcp_fc_ct_job_handler;
ret = zfcp_fsf_send_ct(wka_port, ct, NULL);
if (ret)
zfcp_fc_wka_port_put(wka_port);
Expand All @@ -752,7 +774,6 @@ int zfcp_fc_exec_bsg_job(struct fc_bsg_job *job)

ct_els->req = job->request_payload.sg_list;
ct_els->resp = job->reply_payload.sg_list;
ct_els->handler = zfcp_fc_ct_els_job_handler;
ct_els->handler_data = job;

switch (job->request->msgcode) {
Expand Down

0 comments on commit 5c1a4b0

Please sign in to comment.