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
148 if (mutex_lock_interruptible(&wka_port->mutex)) in zfcp_fc_wka_port_get()
151 if (wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE || in zfcp_fc_wka_port_get()
152 wka_port->status == ZFCP_FC_WKA_PORT_CLOSING) { in zfcp_fc_wka_port_get()
153 wka_port->status = ZFCP_FC_WKA_PORT_OPENING; in zfcp_fc_wka_port_get()
154 if (zfcp_fsf_open_wka_port(wka_port)) in zfcp_fc_wka_port_get()
155 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_get()
158 mutex_unlock(&wka_port->mutex); in zfcp_fc_wka_port_get()
160 wait_event(wka_port->completion_wq, in zfcp_fc_wka_port_get()
161 wka_port->status == ZFCP_FC_WKA_PORT_ONLINE || in zfcp_fc_wka_port_get()
162 wka_port->status == ZFCP_FC_WKA_PORT_OFFLINE); in zfcp_fc_wka_port_get()
164 if (wka_port->status == ZFCP_FC_WKA_PORT_ONLINE) { in zfcp_fc_wka_port_get()
165 atomic_inc(&wka_port->refcount); in zfcp_fc_wka_port_get()
174 struct zfcp_fc_wka_port *wka_port = in zfcp_fc_wka_port_offline() local
177 mutex_lock(&wka_port->mutex); in zfcp_fc_wka_port_offline()
178 if ((atomic_read(&wka_port->refcount) != 0) || in zfcp_fc_wka_port_offline()
179 (wka_port->status != ZFCP_FC_WKA_PORT_ONLINE)) in zfcp_fc_wka_port_offline()
182 wka_port->status = ZFCP_FC_WKA_PORT_CLOSING; in zfcp_fc_wka_port_offline()
183 if (zfcp_fsf_close_wka_port(wka_port)) { in zfcp_fc_wka_port_offline()
184 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_offline()
185 wake_up(&wka_port->completion_wq); in zfcp_fc_wka_port_offline()
188 mutex_unlock(&wka_port->mutex); in zfcp_fc_wka_port_offline()
191 static void zfcp_fc_wka_port_put(struct zfcp_fc_wka_port *wka_port) in zfcp_fc_wka_port_put() argument
193 if (atomic_dec_return(&wka_port->refcount) != 0) in zfcp_fc_wka_port_put()
196 schedule_delayed_work(&wka_port->work, HZ / 100); in zfcp_fc_wka_port_put()
199 static void zfcp_fc_wka_port_init(struct zfcp_fc_wka_port *wka_port, u32 d_id, in zfcp_fc_wka_port_init() argument
202 init_waitqueue_head(&wka_port->completion_wq); in zfcp_fc_wka_port_init()
204 wka_port->adapter = adapter; in zfcp_fc_wka_port_init()
205 wka_port->d_id = d_id; in zfcp_fc_wka_port_init()
207 wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; in zfcp_fc_wka_port_init()
208 atomic_set(&wka_port->refcount, 0); in zfcp_fc_wka_port_init()
209 mutex_init(&wka_port->mutex); in zfcp_fc_wka_port_init()
210 INIT_DELAYED_WORK(&wka_port->work, zfcp_fc_wka_port_offline); in zfcp_fc_wka_port_init()
937 struct zfcp_fc_wka_port *wka_port; in zfcp_fc_ct_job_handler() local
939 wka_port = zfcp_fc_job_wka_port(job); in zfcp_fc_ct_job_handler()
940 zfcp_fc_wka_port_put(wka_port); in zfcp_fc_ct_job_handler()
973 struct zfcp_fc_wka_port *wka_port; in zfcp_fc_exec_ct_job() local
975 wka_port = zfcp_fc_job_wka_port(job); in zfcp_fc_exec_ct_job()
976 if (!wka_port) in zfcp_fc_exec_ct_job()
979 ret = zfcp_fc_wka_port_get(wka_port); in zfcp_fc_exec_ct_job()
984 ret = zfcp_fsf_send_ct(wka_port, ct, NULL, job->timeout / HZ); in zfcp_fc_exec_ct_job()
986 zfcp_fc_wka_port_put(wka_port); in zfcp_fc_exec_ct_job()