Lines Matching refs:wka_port
146 static int zfcp_fc_wka_port_get(struct zfcp_fc_wka_port *wka_port) in zfcp_fc_wka_port_get() argument
150 if (mutex_lock_interruptible(&wka_port->mutex)) in zfcp_fc_wka_port_get()
153 if (wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE || in zfcp_fc_wka_port_get()
154 wka_port->status == ZFCP_FC_WKA_PORT_CLOSING) { in zfcp_fc_wka_port_get()
155 wka_port->status = ZFCP_FC_WKA_PORT_OPENING; in zfcp_fc_wka_port_get()
156 if (zfcp_fsf_open_wka_port(wka_port)) { in zfcp_fc_wka_port_get()
158 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_get()
163 wait_event(wka_port->opened, in zfcp_fc_wka_port_get()
164 wka_port->status == ZFCP_FC_WKA_PORT_ONLINE || in zfcp_fc_wka_port_get()
165 wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE); in zfcp_fc_wka_port_get()
167 if (wka_port->status == ZFCP_FC_WKA_PORT_ONLINE) { in zfcp_fc_wka_port_get()
168 atomic_inc(&wka_port->refcount); in zfcp_fc_wka_port_get()
173 mutex_unlock(&wka_port->mutex); in zfcp_fc_wka_port_get()
180 struct zfcp_fc_wka_port *wka_port = in zfcp_fc_wka_port_offline() local
183 mutex_lock(&wka_port->mutex); in zfcp_fc_wka_port_offline()
184 if ((atomic_read(&wka_port->refcount) != 0) || in zfcp_fc_wka_port_offline()
185 (wka_port->status != ZFCP_FC_WKA_PORT_ONLINE)) in zfcp_fc_wka_port_offline()
188 wka_port->status = ZFCP_FC_WKA_PORT_CLOSING; in zfcp_fc_wka_port_offline()
189 if (zfcp_fsf_close_wka_port(wka_port)) { in zfcp_fc_wka_port_offline()
191 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_offline()
194 wait_event(wka_port->closed, in zfcp_fc_wka_port_offline()
195 wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE); in zfcp_fc_wka_port_offline()
197 mutex_unlock(&wka_port->mutex); in zfcp_fc_wka_port_offline()
200 static void zfcp_fc_wka_port_put(struct zfcp_fc_wka_port *wka_port) in zfcp_fc_wka_port_put() argument
202 if (atomic_dec_return(&wka_port->refcount) != 0) in zfcp_fc_wka_port_put()
205 queue_delayed_work(wka_port->adapter->work_queue, &wka_port->work, in zfcp_fc_wka_port_put()
209 static void zfcp_fc_wka_port_init(struct zfcp_fc_wka_port *wka_port, u32 d_id, in zfcp_fc_wka_port_init() argument
212 init_waitqueue_head(&wka_port->opened); in zfcp_fc_wka_port_init()
213 init_waitqueue_head(&wka_port->closed); in zfcp_fc_wka_port_init()
215 wka_port->adapter = adapter; in zfcp_fc_wka_port_init()
216 wka_port->d_id = d_id; in zfcp_fc_wka_port_init()
218 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_init()
219 atomic_set(&wka_port->refcount, 0); in zfcp_fc_wka_port_init()
220 mutex_init(&wka_port->mutex); in zfcp_fc_wka_port_init()
221 INIT_DELAYED_WORK(&wka_port->work, zfcp_fc_wka_port_offline); in zfcp_fc_wka_port_init()
1014 struct zfcp_fc_wka_port *wka_port; in zfcp_fc_ct_job_handler() local
1016 wka_port = zfcp_fc_job_wka_port(job); in zfcp_fc_ct_job_handler()
1017 zfcp_fc_wka_port_put(wka_port); in zfcp_fc_ct_job_handler()
1050 struct zfcp_fc_wka_port *wka_port; in zfcp_fc_exec_ct_job() local
1052 wka_port = zfcp_fc_job_wka_port(job); in zfcp_fc_exec_ct_job()
1053 if (!wka_port) in zfcp_fc_exec_ct_job()
1056 ret = zfcp_fc_wka_port_get(wka_port); in zfcp_fc_exec_ct_job()
1061 ret = zfcp_fsf_send_ct(wka_port, ct, NULL, job->timeout / HZ); in zfcp_fc_exec_ct_job()
1063 zfcp_fc_wka_port_put(wka_port); in zfcp_fc_exec_ct_job()