Lines Matching full: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 shost_for_each_device(sdev, port->adapter->scsi_host) in zfcp_erp_action_dismiss_port()
111 static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter) in zfcp_erp_action_dismiss_adapter() argument
115 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_INUSE) in zfcp_erp_action_dismiss_adapter()
116 zfcp_erp_action_dismiss(&adapter->erp_action); in zfcp_erp_action_dismiss_adapter()
118 read_lock(&adapter->port_list_lock); in zfcp_erp_action_dismiss_adapter()
119 list_for_each_entry(port, &adapter->port_list, list) in zfcp_erp_action_dismiss_adapter()
121 read_unlock(&adapter->port_list_lock); in zfcp_erp_action_dismiss_adapter()
125 static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter, in zfcp_erp_required_act() argument
155 a_status = atomic_read(&adapter->status); in zfcp_erp_required_act()
165 a_status = atomic_read(&adapter->status); in zfcp_erp_required_act()
170 return 0; /* shutdown requested for closed adapter */ in zfcp_erp_required_act()
177 struct zfcp_adapter *adapter, in zfcp_erp_setup_act() argument
215 kref_get(&adapter->ref); in zfcp_erp_setup_act()
216 zfcp_erp_action_dismiss_adapter(adapter); in zfcp_erp_setup_act()
217 atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status); in zfcp_erp_setup_act()
218 erp_action = &adapter->erp_action; in zfcp_erp_setup_act()
220 if (!(atomic_read(&adapter->status) & in zfcp_erp_setup_act()
229 erp_action->adapter = adapter; in zfcp_erp_setup_act()
236 static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter, in zfcp_erp_action_enqueue() argument
244 if (!adapter->erp_thread) in zfcp_erp_action_enqueue()
247 need = zfcp_erp_required_act(want, adapter, port, sdev); in zfcp_erp_action_enqueue()
251 act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev); in zfcp_erp_action_enqueue()
254 atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status); in zfcp_erp_action_enqueue()
255 ++adapter->erp_total_count; in zfcp_erp_action_enqueue()
256 list_add_tail(&act->list, &adapter->erp_ready_head); in zfcp_erp_action_enqueue()
257 wake_up(&adapter->erp_ready_wq); in zfcp_erp_action_enqueue()
260 zfcp_dbf_rec_trig(id, adapter, port, sdev, want, need); in zfcp_erp_action_enqueue()
264 static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, in _zfcp_erp_adapter_reopen() argument
267 zfcp_erp_adapter_block(adapter, clear_mask); in _zfcp_erp_adapter_reopen()
268 zfcp_scsi_schedule_rports_block(adapter); in _zfcp_erp_adapter_reopen()
271 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) { in _zfcp_erp_adapter_reopen()
272 zfcp_erp_set_adapter_status(adapter, in _zfcp_erp_adapter_reopen()
277 adapter, NULL, NULL, id, 0); in _zfcp_erp_adapter_reopen()
281 * zfcp_erp_adapter_reopen - Reopen adapter.
282 * @adapter: Adapter to reopen.
286 void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, char *id) in zfcp_erp_adapter_reopen() argument
290 zfcp_erp_adapter_block(adapter, clear); in zfcp_erp_adapter_reopen()
291 zfcp_scsi_schedule_rports_block(adapter); in zfcp_erp_adapter_reopen()
293 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_adapter_reopen()
294 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) in zfcp_erp_adapter_reopen()
295 zfcp_erp_set_adapter_status(adapter, in zfcp_erp_adapter_reopen()
298 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter, in zfcp_erp_adapter_reopen()
300 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_adapter_reopen()
304 * zfcp_erp_adapter_shutdown - Shutdown adapter.
305 * @adapter: Adapter to shut down.
309 void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear, in zfcp_erp_adapter_shutdown() argument
313 zfcp_erp_adapter_reopen(adapter, clear | flags, id); in zfcp_erp_adapter_shutdown()
344 port->adapter, port, NULL, id, 0); in _zfcp_erp_port_forced_reopen()
356 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_port_forced_reopen() local
358 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_port_forced_reopen()
360 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_port_forced_reopen()
375 port->adapter, port, NULL, id, 0); in _zfcp_erp_port_reopen()
390 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_port_reopen() local
392 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_port_reopen()
394 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_port_reopen()
409 struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; in _zfcp_erp_lun_reopen() local
416 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter, in _zfcp_erp_lun_reopen()
433 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_lun_reopen() local
435 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_lun_reopen()
437 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_lun_reopen()
467 struct zfcp_adapter *adapter = port->adapter; in zfcp_erp_lun_shutdown_wait() local
470 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_lun_shutdown_wait()
472 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_lun_shutdown_wait()
474 zfcp_erp_wait(adapter); in zfcp_erp_lun_shutdown_wait()
482 static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter) in zfcp_erp_adapter_unblock() argument
484 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status)) in zfcp_erp_adapter_unblock()
485 zfcp_dbf_rec_run("eraubl1", &adapter->erp_action); in zfcp_erp_adapter_unblock()
486 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status); in zfcp_erp_adapter_unblock()
507 list_move(&erp_action->list, &erp_action->adapter->erp_running_head); in zfcp_erp_action_to_running()
513 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_strategy_check_fsfreq() local
519 spin_lock(&adapter->req_list->lock); in zfcp_erp_strategy_check_fsfreq()
520 req = _zfcp_reqlist_find(adapter->req_list, act->fsf_req_id); in zfcp_erp_strategy_check_fsfreq()
534 spin_unlock(&adapter->req_list->lock); in zfcp_erp_strategy_check_fsfreq()
544 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_notify() local
547 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_notify()
552 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_notify()
579 static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter, in _zfcp_erp_port_reopen_all() argument
584 read_lock(&adapter->port_list_lock); in _zfcp_erp_port_reopen_all()
585 list_for_each_entry(port, &adapter->port_list, list) in _zfcp_erp_port_reopen_all()
587 read_unlock(&adapter->port_list_lock); in _zfcp_erp_port_reopen_all()
595 shost_for_each_device(sdev, port->adapter->scsi_host) in _zfcp_erp_lun_reopen_all()
604 _zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1"); in zfcp_erp_strategy_followup_failed()
622 _zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1"); in zfcp_erp_strategy_followup_success()
633 static void zfcp_erp_wakeup(struct zfcp_adapter *adapter) in zfcp_erp_wakeup() argument
637 read_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_wakeup()
638 if (list_empty(&adapter->erp_ready_head) && in zfcp_erp_wakeup()
639 list_empty(&adapter->erp_running_head)) { in zfcp_erp_wakeup()
641 &adapter->status); in zfcp_erp_wakeup()
642 wake_up(&adapter->erp_done_wqh); in zfcp_erp_wakeup()
644 read_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_wakeup()
647 static void zfcp_erp_enqueue_ptp_port(struct zfcp_adapter *adapter) in zfcp_erp_enqueue_ptp_port() argument
650 port = zfcp_port_enqueue(adapter, adapter->peer_wwpn, 0, in zfcp_erp_enqueue_ptp_port()
651 adapter->peer_d_id); in zfcp_erp_enqueue_ptp_port()
661 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_adapter_strat_fsf_xconf() local
663 atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
667 &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
668 write_lock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strat_fsf_xconf()
670 write_unlock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strat_fsf_xconf()
673 &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
677 wait_event(adapter->erp_ready_wq, in zfcp_erp_adapter_strat_fsf_xconf()
678 !list_empty(&adapter->erp_ready_head)); in zfcp_erp_adapter_strat_fsf_xconf()
682 if (!(atomic_read(&adapter->status) & in zfcp_erp_adapter_strat_fsf_xconf()
691 &adapter->status); in zfcp_erp_adapter_strat_fsf_xconf()
693 if (!(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_XCONFIG_OK)) in zfcp_erp_adapter_strat_fsf_xconf()
696 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP) in zfcp_erp_adapter_strat_fsf_xconf()
697 zfcp_erp_enqueue_ptp_port(adapter); in zfcp_erp_adapter_strat_fsf_xconf()
705 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy_open_fsf_xport() local
707 write_lock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strategy_open_fsf_xport()
709 write_unlock_irq(&adapter->erp_lock); in zfcp_erp_adapter_strategy_open_fsf_xport()
718 wait_event(adapter->erp_ready_wq, in zfcp_erp_adapter_strategy_open_fsf_xport()
719 !list_empty(&adapter->erp_ready_head)); in zfcp_erp_adapter_strategy_open_fsf_xport()
735 if (mempool_resize(act->adapter->pool.sr_data, in zfcp_erp_adapter_strategy_open_fsf()
736 act->adapter->stat_read_buf_num, GFP_KERNEL)) in zfcp_erp_adapter_strategy_open_fsf()
739 if (mempool_resize(act->adapter->pool.status_read_req, in zfcp_erp_adapter_strategy_open_fsf()
740 act->adapter->stat_read_buf_num, GFP_KERNEL)) in zfcp_erp_adapter_strategy_open_fsf()
743 atomic_set(&act->adapter->stat_miss, act->adapter->stat_read_buf_num); in zfcp_erp_adapter_strategy_open_fsf()
744 if (zfcp_status_read_refill(act->adapter)) in zfcp_erp_adapter_strategy_open_fsf()
752 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy_close() local
754 /* close queues to ensure that buffers are not accessed by adapter */ in zfcp_erp_adapter_strategy_close()
755 zfcp_qdio_close(adapter->qdio); in zfcp_erp_adapter_strategy_close()
756 zfcp_fsf_req_dismiss_all(adapter); in zfcp_erp_adapter_strategy_close()
757 adapter->fsf_req_seq_no = 0; in zfcp_erp_adapter_strategy_close()
758 zfcp_fc_wka_ports_force_offline(adapter->gs); in zfcp_erp_adapter_strategy_close()
760 zfcp_erp_clear_adapter_status(adapter, ZFCP_STATUS_COMMON_OPEN); in zfcp_erp_adapter_strategy_close()
763 ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status); in zfcp_erp_adapter_strategy_close()
768 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy_open() local
770 if (zfcp_qdio_open(adapter->qdio)) { in zfcp_erp_adapter_strategy_open()
773 &adapter->status); in zfcp_erp_adapter_strategy_open()
782 atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &adapter->status); in zfcp_erp_adapter_strategy_open()
789 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_adapter_strategy() local
791 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_OPEN) { in zfcp_erp_adapter_strategy()
873 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_open_ptp_port() local
876 if (port->wwpn != adapter->peer_wwpn) { in zfcp_erp_open_ptp_port()
880 port->d_id = adapter->peer_d_id; in zfcp_erp_open_ptp_port()
886 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_port_strategy_open_common() local
894 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP) in zfcp_erp_port_strategy_open_common()
1017 dev_err(&zfcp_sdev->port->adapter->ccw_device->dev, in zfcp_erp_strategy_check_lun()
1050 dev_err(&port->adapter->ccw_device->dev, in zfcp_erp_strategy_check_port()
1066 static int zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, in zfcp_erp_strategy_check_adapter() argument
1071 atomic_set(&adapter->erp_counter, 0); in zfcp_erp_strategy_check_adapter()
1072 zfcp_erp_adapter_unblock(adapter); in zfcp_erp_strategy_check_adapter()
1076 atomic_inc(&adapter->erp_counter); in zfcp_erp_strategy_check_adapter()
1077 if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) { in zfcp_erp_strategy_check_adapter()
1078 dev_err(&adapter->ccw_device->dev, in zfcp_erp_strategy_check_adapter()
1081 zfcp_erp_set_adapter_status(adapter, in zfcp_erp_strategy_check_adapter()
1087 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) { in zfcp_erp_strategy_check_adapter()
1088 zfcp_erp_adapter_block(adapter, 0); in zfcp_erp_strategy_check_adapter()
1097 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_strategy_check_target() local
1113 result = zfcp_erp_strategy_check_adapter(adapter, result); in zfcp_erp_strategy_check_target()
1137 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_strategy_statechange() local
1145 if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) { in zfcp_erp_strategy_statechange()
1146 _zfcp_erp_adapter_reopen(adapter, in zfcp_erp_strategy_statechange()
1178 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_action_dequeue() local
1181 adapter->erp_total_count--; in zfcp_erp_action_dequeue()
1183 adapter->erp_low_mem_count--; in zfcp_erp_action_dequeue()
1205 &erp_action->adapter->status); in zfcp_erp_action_dequeue()
1212 struct zfcp_adapter *adapter = act->adapter; in zfcp_erp_action_cleanup() local
1232 register_service_level(&adapter->service_level); in zfcp_erp_action_cleanup()
1233 queue_work(adapter->work_queue, &adapter->scan_work); in zfcp_erp_action_cleanup()
1234 queue_work(adapter->work_queue, &adapter->ns_up_work); in zfcp_erp_action_cleanup()
1236 unregister_service_level(&adapter->service_level); in zfcp_erp_action_cleanup()
1238 kref_put(&adapter->ref, zfcp_adapter_release); in zfcp_erp_action_cleanup()
1262 struct zfcp_adapter *adapter = erp_action->adapter; in zfcp_erp_strategy() local
1264 kref_get(&adapter->ref); in zfcp_erp_strategy()
1266 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1283 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1285 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1293 ++adapter->erp_low_mem_count; in zfcp_erp_strategy()
1296 if (adapter->erp_total_count == adapter->erp_low_mem_count) in zfcp_erp_strategy()
1297 _zfcp_erp_adapter_reopen(adapter, 0, "erstgy1"); in zfcp_erp_strategy()
1306 --adapter->erp_low_mem_count; in zfcp_erp_strategy()
1324 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_strategy()
1329 kref_put(&adapter->ref, zfcp_adapter_release); in zfcp_erp_strategy()
1335 struct zfcp_adapter *adapter = (struct zfcp_adapter *) data; in zfcp_erp_thread() local
1341 wait_event_interruptible(adapter->erp_ready_wq, in zfcp_erp_thread()
1342 !list_empty(&adapter->erp_ready_head) || in zfcp_erp_thread()
1348 write_lock_irqsave(&adapter->erp_lock, flags); in zfcp_erp_thread()
1349 next = adapter->erp_ready_head.next; in zfcp_erp_thread()
1350 write_unlock_irqrestore(&adapter->erp_lock, flags); in zfcp_erp_thread()
1352 if (next != &adapter->erp_ready_head) { in zfcp_erp_thread()
1357 zfcp_erp_wakeup(adapter); in zfcp_erp_thread()
1365 * zfcp_erp_thread_setup - Start ERP thread for adapter
1366 * @adapter: Adapter to start the ERP thread for
1370 int zfcp_erp_thread_setup(struct zfcp_adapter *adapter) in zfcp_erp_thread_setup() argument
1374 thread = kthread_run(zfcp_erp_thread, adapter, "zfcperp%s", in zfcp_erp_thread_setup()
1375 dev_name(&adapter->ccw_device->dev)); in zfcp_erp_thread_setup()
1377 dev_err(&adapter->ccw_device->dev, in zfcp_erp_thread_setup()
1382 adapter->erp_thread = thread; in zfcp_erp_thread_setup()
1388 * @adapter: Adapter where the ERP thread should be stopped.
1390 * The caller of this routine ensures that the specified adapter has
1395 void zfcp_erp_thread_kill(struct zfcp_adapter *adapter) in zfcp_erp_thread_kill() argument
1397 kthread_stop(adapter->erp_thread); in zfcp_erp_thread_kill()
1398 adapter->erp_thread = NULL; in zfcp_erp_thread_kill()
1399 WARN_ON(!list_empty(&adapter->erp_ready_head)); in zfcp_erp_thread_kill()
1400 WARN_ON(!list_empty(&adapter->erp_running_head)); in zfcp_erp_thread_kill()
1404 * zfcp_erp_wait - wait for completion of error recovery on an adapter
1405 * @adapter: adapter for which to wait for completion of its error recovery
1407 void zfcp_erp_wait(struct zfcp_adapter *adapter) in zfcp_erp_wait() argument
1409 wait_event(adapter->erp_done_wqh, in zfcp_erp_wait()
1410 !(atomic_read(&adapter->status) & in zfcp_erp_wait()
1415 * zfcp_erp_set_adapter_status - set adapter status bits
1416 * @adapter: adapter to change the status
1421 void zfcp_erp_set_adapter_status(struct zfcp_adapter *adapter, u32 mask) in zfcp_erp_set_adapter_status() argument
1428 atomic_set_mask(mask, &adapter->status); in zfcp_erp_set_adapter_status()
1433 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_erp_set_adapter_status()
1434 list_for_each_entry(port, &adapter->port_list, list) in zfcp_erp_set_adapter_status()
1436 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_erp_set_adapter_status()
1438 shost_for_each_device(sdev, adapter->scsi_host) in zfcp_erp_set_adapter_status()
1443 * zfcp_erp_clear_adapter_status - clear adapter status bits
1444 * @adapter: adapter to change the status
1449 void zfcp_erp_clear_adapter_status(struct zfcp_adapter *adapter, u32 mask) in zfcp_erp_clear_adapter_status() argument
1457 atomic_clear_mask(mask, &adapter->status); in zfcp_erp_clear_adapter_status()
1463 atomic_set(&adapter->erp_counter, 0); in zfcp_erp_clear_adapter_status()
1465 read_lock_irqsave(&adapter->port_list_lock, flags); in zfcp_erp_clear_adapter_status()
1466 list_for_each_entry(port, &adapter->port_list, list) { in zfcp_erp_clear_adapter_status()
1471 read_unlock_irqrestore(&adapter->port_list_lock, flags); in zfcp_erp_clear_adapter_status()
1473 shost_for_each_device(sdev, adapter->scsi_host) { in zfcp_erp_clear_adapter_status()
1497 shost_for_each_device(sdev, port->adapter->scsi_host) in zfcp_erp_set_port_status()
1505 * @port: adapter to change the status
1524 shost_for_each_device(sdev, port->adapter->scsi_host) in zfcp_erp_clear_port_status()