Lines Matching refs:adapter
58 static void zfcp_erp_adapter_block(struct zfcp_adapter *adapter, int mask) in zfcp_erp_adapter_block() argument
60 zfcp_erp_clear_adapter_status(adapter, in zfcp_erp_adapter_block()
68 list_for_each_entry(curr_act, &act->adapter->erp_running_head, list) in zfcp_erp_action_exists()
76 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_action_ready() local
78 list_move(&act->list, &act->adapter->erp_ready_head); in zfcp_erp_action_ready()
80 wake_up(&adapter->erp_ready_wq); in zfcp_erp_action_ready()
106 spin_lock(port->adapter->scsi_host->host_lock); in zfcp_erp_action_dismiss_port()
107 __shost_for_each_device(sdev, port->adapter->scsi_host) in zfcp_erp_action_dismiss_port()
110 spin_unlock(port->adapter->scsi_host->host_lock); in zfcp_erp_action_dismiss_port()
114 static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter) in zfcp_erp_action_dismiss_adapter() argument
118 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_INUSE) in zfcp_erp_action_dismiss_adapter()
119 zfcp_erp_action_dismiss(&adapter->erp_action); in zfcp_erp_action_dismiss_adapter()
121 read_lock(&adapter->port_list_lock); in zfcp_erp_action_dismiss_adapter()
122 list_for_each_entry(port, &adapter->port_list, list) in zfcp_erp_action_dismiss_adapter()
124 read_unlock(&adapter->port_list_lock); in zfcp_erp_action_dismiss_adapter()
128 static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter, in zfcp_erp_required_act() argument
158 a_status = atomic_read(&adapter->status); in zfcp_erp_required_act()
168 a_status = atomic_read(&adapter->status); in zfcp_erp_required_act()
180 struct zfcp_adapter *adapter, in zfcp_erp_setup_act() argument
218 kref_get(&adapter->ref); in zfcp_erp_setup_act()
219 zfcp_erp_action_dismiss_adapter(adapter); in zfcp_erp_setup_act()
220 atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); in zfcp_erp_setup_act()
221 erp_action = &adapter->erp_action; in zfcp_erp_setup_act()
223 if (!(atomic_read(&adapter->status) & in zfcp_erp_setup_act()
232 erp_action->adapter = adapter; in zfcp_erp_setup_act()
239 static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter, in zfcp_erp_action_enqueue() argument
247 if (!adapter->erp_thread) in zfcp_erp_action_enqueue()
250 need = zfcp_erp_required_act(want, adapter, port, sdev); in zfcp_erp_action_enqueue()
254 act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev); in zfcp_erp_action_enqueue()
257 atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status); in zfcp_erp_action_enqueue()
258 ++adapter->erp_total_count; in zfcp_erp_action_enqueue()
259 list_add_tail(&act->list, &adapter->erp_ready_head); in zfcp_erp_action_enqueue()
260 wake_up(&adapter->erp_ready_wq); in zfcp_erp_action_enqueue()
263 zfcp_dbf_rec_trig(id, adapter, port, sdev, want, need); in zfcp_erp_action_enqueue()
267 static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, in _zfcp_erp_adapter_reopen() argument
270 zfcp_erp_adapter_block(adapter, clear_mask); in _zfcp_erp_adapter_reopen()
271 zfcp_scsi_schedule_rports_block(adapter); in _zfcp_erp_adapter_reopen()
274 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) { in _zfcp_erp_adapter_reopen()
275 zfcp_erp_set_adapter_status(adapter, in _zfcp_erp_adapter_reopen()
280 adapter, NULL, NULL, id, 0); in _zfcp_erp_adapter_reopen()
289 void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, char *id) in zfcp_erp_adapter_reopen() argument
293 zfcp_erp_adapter_block(adapter, clear); in zfcp_erp_adapter_reopen()
294 zfcp_scsi_schedule_rports_block(adapter); in zfcp_erp_adapter_reopen()
296 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_adapter_reopen()
297 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) in zfcp_erp_adapter_reopen()
298 zfcp_erp_set_adapter_status(adapter, in zfcp_erp_adapter_reopen()
301 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter, in zfcp_erp_adapter_reopen()
303 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_adapter_reopen()
312 void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear, in zfcp_erp_adapter_shutdown() argument
316 zfcp_erp_adapter_reopen(adapter, clear | flags, id); in zfcp_erp_adapter_shutdown()
347 port->adapter, port, NULL, id, 0); in _zfcp_erp_port_forced_reopen()
359 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_port_forced_reopen() local
361 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_port_forced_reopen()
363 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_port_forced_reopen()
378 port->adapter, port, NULL, id, 0); in _zfcp_erp_port_reopen()
393 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_port_reopen() local
395 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_port_reopen()
397 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_port_reopen()
412 struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; in _zfcp_erp_lun_reopen() local
419 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter, in _zfcp_erp_lun_reopen()
436 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_lun_reopen() local
438 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_lun_reopen()
440 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_lun_reopen()
470 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_lun_shutdown_wait() local
473 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_lun_shutdown_wait()
475 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_lun_shutdown_wait()
477 zfcp_erp_wait(adapter); in zfcp_erp_lun_shutdown_wait()
485 static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter) in zfcp_erp_adapter_unblock() argument
487 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status)) in zfcp_erp_adapter_unblock()
488 zfcp_dbf_rec_run("eraubl1", &adapter->erp_action); in zfcp_erp_adapter_unblock()
489 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status); in zfcp_erp_adapter_unblock()
510 list_move(&erp_action->list, &erp_action->adapter->erp_running_head); in zfcp_erp_action_to_running()
516 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_strategy_check_fsfreq() local
522 spin_lock(&adapter->req_list->lock); in zfcp_erp_strategy_check_fsfreq()
523 req = _zfcp_reqlist_find(adapter->req_list, act->fsf_req_id); in zfcp_erp_strategy_check_fsfreq()
537 spin_unlock(&adapter->req_list->lock); in zfcp_erp_strategy_check_fsfreq()
547 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_notify() local
550 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_notify()
555 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_notify()
582 static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter, in _zfcp_erp_port_reopen_all() argument
587 read_lock(&adapter->port_list_lock); in _zfcp_erp_port_reopen_all()
588 list_for_each_entry(port, &adapter->port_list, list) in _zfcp_erp_port_reopen_all()
590 read_unlock(&adapter->port_list_lock); in _zfcp_erp_port_reopen_all()
598 spin_lock(port->adapter->scsi_host->host_lock); in _zfcp_erp_lun_reopen_all()
599 __shost_for_each_device(sdev, port->adapter->scsi_host) in _zfcp_erp_lun_reopen_all()
602 spin_unlock(port->adapter->scsi_host->host_lock); in _zfcp_erp_lun_reopen_all()
609 _zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1"); in zfcp_erp_strategy_followup_failed()
627 _zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1"); in zfcp_erp_strategy_followup_success()
638 static void zfcp_erp_wakeup(struct zfcp_adapter *adapter) in zfcp_erp_wakeup() argument
642 read_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_wakeup()
643 if (list_empty(&adapter->erp_ready_head) && in zfcp_erp_wakeup()
644 list_empty(&adapter->erp_running_head)) { in zfcp_erp_wakeup()
646 &adapter->status); in zfcp_erp_wakeup()
647 wake_up(&adapter->erp_done_wqh); in zfcp_erp_wakeup()
649 read_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_wakeup()
652 static void zfcp_erp_enqueue_ptp_port(struct zfcp_adapter *adapter) in zfcp_erp_enqueue_ptp_port() argument
655 port = zfcp_port_enqueue(adapter, adapter->peer_wwpn, 0, in zfcp_erp_enqueue_ptp_port()
656 adapter->peer_d_id); in zfcp_erp_enqueue_ptp_port()
666 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_adapter_strat_fsf_xconf() local
668 atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
672 &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
673 write_lock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strat_fsf_xconf()
675 write_unlock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strat_fsf_xconf()
678 &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
682 wait_event(adapter->erp_ready_wq, in zfcp_erp_adapter_strat_fsf_xconf()
683 !list_empty(&adapter->erp_ready_head)); in zfcp_erp_adapter_strat_fsf_xconf()
687 if (!(atomic_read(&adapter->status) & in zfcp_erp_adapter_strat_fsf_xconf()
696 &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
698 if (!(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_XCONFIG_OK)) in zfcp_erp_adapter_strat_fsf_xconf()
701 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP) in zfcp_erp_adapter_strat_fsf_xconf()
702 zfcp_erp_enqueue_ptp_port(adapter); in zfcp_erp_adapter_strat_fsf_xconf()
710 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy_open_fsf_xport() local
712 write_lock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strategy_open_fsf_xport()
714 write_unlock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strategy_open_fsf_xport()
723 wait_event(adapter->erp_ready_wq, in zfcp_erp_adapter_strategy_open_fsf_xport()
724 !list_empty(&adapter->erp_ready_head)); in zfcp_erp_adapter_strategy_open_fsf_xport()
740 if (mempool_resize(act->adapter->pool.sr_data, in zfcp_erp_adapter_strategy_open_fsf()
741 act->adapter->stat_read_buf_num)) in zfcp_erp_adapter_strategy_open_fsf()
744 if (mempool_resize(act->adapter->pool.status_read_req, in zfcp_erp_adapter_strategy_open_fsf()
745 act->adapter->stat_read_buf_num)) in zfcp_erp_adapter_strategy_open_fsf()
748 atomic_set(&act->adapter->stat_miss, act->adapter->stat_read_buf_num); in zfcp_erp_adapter_strategy_open_fsf()
749 if (zfcp_status_read_refill(act->adapter)) in zfcp_erp_adapter_strategy_open_fsf()
757 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy_close() local
760 zfcp_qdio_close(adapter->qdio); in zfcp_erp_adapter_strategy_close()
761 zfcp_fsf_req_dismiss_all(adapter); in zfcp_erp_adapter_strategy_close()
762 adapter->fsf_req_seq_no = 0; in zfcp_erp_adapter_strategy_close()
763 zfcp_fc_wka_ports_force_offline(adapter->gs); in zfcp_erp_adapter_strategy_close()
765 zfcp_erp_clear_adapter_status(adapter, ZFCP_STATUS_COMMON_OPEN); in zfcp_erp_adapter_strategy_close()
768 ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status); in zfcp_erp_adapter_strategy_close()
773 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy_open() local
775 if (zfcp_qdio_open(adapter->qdio)) { in zfcp_erp_adapter_strategy_open()
778 &adapter->status); in zfcp_erp_adapter_strategy_open()
787 atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &adapter->status); in zfcp_erp_adapter_strategy_open()
794 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy() local
796 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_OPEN) { in zfcp_erp_adapter_strategy()
872 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_open_ptp_port() local
875 if (port->wwpn != adapter->peer_wwpn) { in zfcp_erp_open_ptp_port()
879 port->d_id = adapter->peer_d_id; in zfcp_erp_open_ptp_port()
885 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_port_strategy_open_common() local
893 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP) in zfcp_erp_port_strategy_open_common()
1014 dev_err(&zfcp_sdev->port->adapter->ccw_device->dev, in zfcp_erp_strategy_check_lun()
1047 dev_err(&port->adapter->ccw_device->dev, in zfcp_erp_strategy_check_port()
1063 static int zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, in zfcp_erp_strategy_check_adapter() argument
1068 atomic_set(&adapter->erp_counter, 0); in zfcp_erp_strategy_check_adapter()
1069 zfcp_erp_adapter_unblock(adapter); in zfcp_erp_strategy_check_adapter()
1073 atomic_inc(&adapter->erp_counter); in zfcp_erp_strategy_check_adapter()
1074 if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) { in zfcp_erp_strategy_check_adapter()
1075 dev_err(&adapter->ccw_device->dev, in zfcp_erp_strategy_check_adapter()
1078 zfcp_erp_set_adapter_status(adapter, in zfcp_erp_strategy_check_adapter()
1084 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) { in zfcp_erp_strategy_check_adapter()
1085 zfcp_erp_adapter_block(adapter, 0); in zfcp_erp_strategy_check_adapter()
1094 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_strategy_check_target() local
1110 result = zfcp_erp_strategy_check_adapter(adapter, result); in zfcp_erp_strategy_check_target()
1134 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_strategy_statechange() local
1142 if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) { in zfcp_erp_strategy_statechange()
1143 _zfcp_erp_adapter_reopen(adapter, in zfcp_erp_strategy_statechange()
1175 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_action_dequeue() local
1178 adapter->erp_total_count--; in zfcp_erp_action_dequeue()
1180 adapter->erp_low_mem_count--; in zfcp_erp_action_dequeue()
1202 &erp_action->adapter->status); in zfcp_erp_action_dequeue()
1209 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_action_cleanup() local
1229 register_service_level(&adapter->service_level); in zfcp_erp_action_cleanup()
1230 zfcp_fc_conditional_port_scan(adapter); in zfcp_erp_action_cleanup()
1231 queue_work(adapter->work_queue, &adapter->ns_up_work); in zfcp_erp_action_cleanup()
1233 unregister_service_level(&adapter->service_level); in zfcp_erp_action_cleanup()
1235 kref_put(&adapter->ref, zfcp_adapter_release); in zfcp_erp_action_cleanup()
1259 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_strategy() local
1261 kref_get(&adapter->ref); in zfcp_erp_strategy()
1263 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1280 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1282 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1290 ++adapter->erp_low_mem_count; in zfcp_erp_strategy()
1293 if (adapter->erp_total_count == adapter->erp_low_mem_count) in zfcp_erp_strategy()
1294 _zfcp_erp_adapter_reopen(adapter, 0, "erstgy1"); in zfcp_erp_strategy()
1303 --adapter->erp_low_mem_count; in zfcp_erp_strategy()
1321 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1326 kref_put(&adapter->ref, zfcp_adapter_release); in zfcp_erp_strategy()
1332 struct zfcp_adapter *adapter = (struct zfcp_adapter *) data; in zfcp_erp_thread() local
1338 wait_event_interruptible(adapter->erp_ready_wq, in zfcp_erp_thread()
1339 !list_empty(&adapter->erp_ready_head) || in zfcp_erp_thread()
1345 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_thread()
1346 next = adapter->erp_ready_head.next; in zfcp_erp_thread()
1347 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_thread()
1349 if (next != &adapter->erp_ready_head) { in zfcp_erp_thread()
1354 zfcp_erp_wakeup(adapter); in zfcp_erp_thread()
1367 int zfcp_erp_thread_setup(struct zfcp_adapter *adapter) in zfcp_erp_thread_setup() argument
1371 thread = kthread_run(zfcp_erp_thread, adapter, "zfcperp%s", in zfcp_erp_thread_setup()
1372 dev_name(&adapter->ccw_device->dev)); in zfcp_erp_thread_setup()
1374 dev_err(&adapter->ccw_device->dev, in zfcp_erp_thread_setup()
1379 adapter->erp_thread = thread; in zfcp_erp_thread_setup()
1392 void zfcp_erp_thread_kill(struct zfcp_adapter *adapter) in zfcp_erp_thread_kill() argument
1394 kthread_stop(adapter->erp_thread); in zfcp_erp_thread_kill()
1395 adapter->erp_thread = NULL; in zfcp_erp_thread_kill()
1396 WARN_ON(!list_empty(&adapter->erp_ready_head)); in zfcp_erp_thread_kill()
1397 WARN_ON(!list_empty(&adapter->erp_running_head)); in zfcp_erp_thread_kill()
1404 void zfcp_erp_wait(struct zfcp_adapter *adapter) in zfcp_erp_wait() argument
1406 wait_event(adapter->erp_done_wqh, in zfcp_erp_wait()
1407 !(atomic_read(&adapter->status) & in zfcp_erp_wait()
1418 void zfcp_erp_set_adapter_status(struct zfcp_adapter *adapter, u32 mask) in zfcp_erp_set_adapter_status() argument
1425 atomic_set_mask(mask, &adapter->status); in zfcp_erp_set_adapter_status()
1430 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_erp_set_adapter_status()
1431 list_for_each_entry(port, &adapter->port_list, list) in zfcp_erp_set_adapter_status()
1433 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_erp_set_adapter_status()
1435 spin_lock_irqsave(adapter->scsi_host->host_lock, flags); in zfcp_erp_set_adapter_status()
1436 __shost_for_each_device(sdev, adapter->scsi_host) in zfcp_erp_set_adapter_status()
1438 spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags); in zfcp_erp_set_adapter_status()
1448 void zfcp_erp_clear_adapter_status(struct zfcp_adapter *adapter, u32 mask) in zfcp_erp_clear_adapter_status() argument
1456 atomic_clear_mask(mask, &adapter->status); in zfcp_erp_clear_adapter_status()
1462 atomic_set(&adapter->erp_counter, 0); in zfcp_erp_clear_adapter_status()
1464 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_erp_clear_adapter_status()
1465 list_for_each_entry(port, &adapter->port_list, list) { in zfcp_erp_clear_adapter_status()
1470 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_erp_clear_adapter_status()
1472 spin_lock_irqsave(adapter->scsi_host->host_lock, flags); in zfcp_erp_clear_adapter_status()
1473 __shost_for_each_device(sdev, adapter->scsi_host) { in zfcp_erp_clear_adapter_status()
1478 spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags); in zfcp_erp_clear_adapter_status()
1499 spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags); in zfcp_erp_set_port_status()
1500 __shost_for_each_device(sdev, port->adapter->scsi_host) in zfcp_erp_set_port_status()
1504 spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags); in zfcp_erp_set_port_status()
1529 spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags); in zfcp_erp_clear_port_status()
1530 __shost_for_each_device(sdev, port->adapter->scsi_host) in zfcp_erp_clear_port_status()
1537 spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags); in zfcp_erp_clear_port_status()