Lines Matching refs:wka_port

145 static int zfcp_fc_wka_port_get(struct zfcp_fc_wka_port *wka_port)  in zfcp_fc_wka_port_get()  argument
147 if (mutex_lock_interruptible(&wka_port->mutex)) in zfcp_fc_wka_port_get()
150 if (wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE || in zfcp_fc_wka_port_get()
151 wka_port->status == ZFCP_FC_WKA_PORT_CLOSING) { in zfcp_fc_wka_port_get()
152 wka_port->status = ZFCP_FC_WKA_PORT_OPENING; in zfcp_fc_wka_port_get()
153 if (zfcp_fsf_open_wka_port(wka_port)) in zfcp_fc_wka_port_get()
154 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_get()
157 mutex_unlock(&wka_port->mutex); in zfcp_fc_wka_port_get()
159 wait_event(wka_port->completion_wq, in zfcp_fc_wka_port_get()
160 wka_port->status == ZFCP_FC_WKA_PORT_ONLINE || in zfcp_fc_wka_port_get()
161 wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE); in zfcp_fc_wka_port_get()
163 if (wka_port->status == ZFCP_FC_WKA_PORT_ONLINE) { in zfcp_fc_wka_port_get()
164 atomic_inc(&wka_port->refcount); in zfcp_fc_wka_port_get()
173 struct zfcp_fc_wka_port *wka_port = in zfcp_fc_wka_port_offline() local
176 mutex_lock(&wka_port->mutex); in zfcp_fc_wka_port_offline()
177 if ((atomic_read(&wka_port->refcount) != 0) || in zfcp_fc_wka_port_offline()
178 (wka_port->status != ZFCP_FC_WKA_PORT_ONLINE)) in zfcp_fc_wka_port_offline()
181 wka_port->status = ZFCP_FC_WKA_PORT_CLOSING; in zfcp_fc_wka_port_offline()
182 if (zfcp_fsf_close_wka_port(wka_port)) { in zfcp_fc_wka_port_offline()
183 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_offline()
184 wake_up(&wka_port->completion_wq); in zfcp_fc_wka_port_offline()
187 mutex_unlock(&wka_port->mutex); in zfcp_fc_wka_port_offline()
190 static void zfcp_fc_wka_port_put(struct zfcp_fc_wka_port *wka_port) in zfcp_fc_wka_port_put() argument
192 if (atomic_dec_return(&wka_port->refcount) != 0) in zfcp_fc_wka_port_put()
195 schedule_delayed_work(&wka_port->work, HZ / 100); in zfcp_fc_wka_port_put()
198 static void zfcp_fc_wka_port_init(struct zfcp_fc_wka_port *wka_port, u32 d_id, in zfcp_fc_wka_port_init() argument
201 init_waitqueue_head(&wka_port->completion_wq); in zfcp_fc_wka_port_init()
203 wka_port->adapter = adapter; in zfcp_fc_wka_port_init()
204 wka_port->d_id = d_id; in zfcp_fc_wka_port_init()
206 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_init()
207 atomic_set(&wka_port->refcount, 0); in zfcp_fc_wka_port_init()
208 mutex_init(&wka_port->mutex); in zfcp_fc_wka_port_init()
209 INIT_DELAYED_WORK(&wka_port->work, zfcp_fc_wka_port_offline); in zfcp_fc_wka_port_init()
928 struct zfcp_fc_wka_port *wka_port; in zfcp_fc_ct_job_handler() local
930 wka_port = zfcp_fc_job_wka_port(job); in zfcp_fc_ct_job_handler()
931 zfcp_fc_wka_port_put(wka_port); in zfcp_fc_ct_job_handler()
963 struct zfcp_fc_wka_port *wka_port; in zfcp_fc_exec_ct_job() local
965 wka_port = zfcp_fc_job_wka_port(job); in zfcp_fc_exec_ct_job()
966 if (!wka_port) in zfcp_fc_exec_ct_job()
969 ret = zfcp_fc_wka_port_get(wka_port); in zfcp_fc_exec_ct_job()
974 ret = zfcp_fsf_send_ct(wka_port, ct, NULL, job->req->timeout / HZ); in zfcp_fc_exec_ct_job()
976 zfcp_fc_wka_port_put(wka_port); in zfcp_fc_exec_ct_job()