aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc/fc_elsct.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libfc/fc_elsct.c')
-rw-r--r--drivers/scsi/libfc/fc_elsct.c49
1 files changed, 44 insertions, 5 deletions
diff --git a/drivers/scsi/libfc/fc_elsct.c b/drivers/scsi/libfc/fc_elsct.c
index 5878b34bff18..5cfa68732e9d 100644
--- a/drivers/scsi/libfc/fc_elsct.c
+++ b/drivers/scsi/libfc/fc_elsct.c
@@ -32,7 +32,7 @@
32 * fc_elsct_send - sends ELS/CT frame 32 * fc_elsct_send - sends ELS/CT frame
33 */ 33 */
34static struct fc_seq *fc_elsct_send(struct fc_lport *lport, 34static struct fc_seq *fc_elsct_send(struct fc_lport *lport,
35 struct fc_rport *rport, 35 u32 did,
36 struct fc_frame *fp, 36 struct fc_frame *fp,
37 unsigned int op, 37 unsigned int op,
38 void (*resp)(struct fc_seq *, 38 void (*resp)(struct fc_seq *,
@@ -41,16 +41,17 @@ static struct fc_seq *fc_elsct_send(struct fc_lport *lport,
41 void *arg, u32 timer_msec) 41 void *arg, u32 timer_msec)
42{ 42{
43 enum fc_rctl r_ctl; 43 enum fc_rctl r_ctl;
44 u32 did = FC_FID_NONE;
45 enum fc_fh_type fh_type; 44 enum fc_fh_type fh_type;
46 int rc; 45 int rc;
47 46
48 /* ELS requests */ 47 /* ELS requests */
49 if ((op >= ELS_LS_RJT) && (op <= ELS_AUTH_ELS)) 48 if ((op >= ELS_LS_RJT) && (op <= ELS_AUTH_ELS))
50 rc = fc_els_fill(lport, rport, fp, op, &r_ctl, &did, &fh_type); 49 rc = fc_els_fill(lport, did, fp, op, &r_ctl, &fh_type);
51 else 50 else {
52 /* CT requests */ 51 /* CT requests */
53 rc = fc_ct_fill(lport, fp, op, &r_ctl, &did, &fh_type); 52 rc = fc_ct_fill(lport, did, fp, op, &r_ctl, &fh_type);
53 did = FC_FID_DIR_SERV;
54 }
54 55
55 if (rc) 56 if (rc)
56 return NULL; 57 return NULL;
@@ -69,3 +70,41 @@ int fc_elsct_init(struct fc_lport *lport)
69 return 0; 70 return 0;
70} 71}
71EXPORT_SYMBOL(fc_elsct_init); 72EXPORT_SYMBOL(fc_elsct_init);
73
74/**
75 * fc_els_resp_type() - return string describing ELS response for debug.
76 * @fp: frame pointer with possible error code.
77 */
78const char *fc_els_resp_type(struct fc_frame *fp)
79{
80 const char *msg;
81 if (IS_ERR(fp)) {
82 switch (-PTR_ERR(fp)) {
83 case FC_NO_ERR:
84 msg = "response no error";
85 break;
86 case FC_EX_TIMEOUT:
87 msg = "response timeout";
88 break;
89 case FC_EX_CLOSED:
90 msg = "response closed";
91 break;
92 default:
93 msg = "response unknown error";
94 break;
95 }
96 } else {
97 switch (fc_frame_payload_op(fp)) {
98 case ELS_LS_ACC:
99 msg = "accept";
100 break;
101 case ELS_LS_RJT:
102 msg = "reject";
103 break;
104 default:
105 msg = "response unknown ELS";
106 break;
107 }
108 }
109 return msg;
110}