1 // SPDX-License-Identifier: GPL-2.0
5 * Error Recovery Procedures (ERP).
7 * Copyright IBM Corp. 2002, 2016
10 #define KMSG_COMPONENT "zfcp"
11 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
13 #include <linux/kthread.h>
15 #include "zfcp_reqlist.h"
17 #define ZFCP_MAX_ERPS 3
19 enum zfcp_erp_act_flags {
20 ZFCP_STATUS_ERP_TIMEDOUT = 0x10000000,
21 ZFCP_STATUS_ERP_CLOSE_ONLY = 0x01000000,
22 ZFCP_STATUS_ERP_DISMISSING = 0x00100000,
23 ZFCP_STATUS_ERP_DISMISSED = 0x00200000,
24 ZFCP_STATUS_ERP_LOWMEM = 0x00400000,
25 ZFCP_STATUS_ERP_NO_REF = 0x00800000,
29 ZFCP_ERP_STEP_UNINITIALIZED = 0x0000,
30 ZFCP_ERP_STEP_FSF_XCONFIG = 0x0001,
31 ZFCP_ERP_STEP_PHYS_PORT_CLOSING = 0x0010,
32 ZFCP_ERP_STEP_PORT_CLOSING = 0x0100,
33 ZFCP_ERP_STEP_PORT_OPENING = 0x0800,
34 ZFCP_ERP_STEP_LUN_CLOSING = 0x1000,
35 ZFCP_ERP_STEP_LUN_OPENING = 0x2000,
39 * enum zfcp_erp_act_type - Type of ERP action object.
40 * @ZFCP_ERP_ACTION_REOPEN_LUN: LUN recovery.
41 * @ZFCP_ERP_ACTION_REOPEN_PORT: Port recovery.
42 * @ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: Forced port recovery.
43 * @ZFCP_ERP_ACTION_REOPEN_ADAPTER: Adapter recovery.
44 * @ZFCP_ERP_ACTION_NONE: Eyecatcher pseudo flag to bitwise or-combine with
45 * either of the first four enum values.
46 * Used to indicate that an ERP action could not be
47 * set up despite a detected need for some recovery.
48 * @ZFCP_ERP_ACTION_FAILED: Eyecatcher pseudo flag to bitwise or-combine with
49 * either of the first four enum values.
50 * Used to indicate that ERP not needed because
51 * the object has ZFCP_STATUS_COMMON_ERP_FAILED.
53 enum zfcp_erp_act_type {
54 ZFCP_ERP_ACTION_REOPEN_LUN = 1,
55 ZFCP_ERP_ACTION_REOPEN_PORT = 2,
56 ZFCP_ERP_ACTION_REOPEN_PORT_FORCED = 3,
57 ZFCP_ERP_ACTION_REOPEN_ADAPTER = 4,
58 ZFCP_ERP_ACTION_NONE = 0xc0,
59 ZFCP_ERP_ACTION_FAILED = 0xe0,
62 enum zfcp_erp_act_state {
63 ZFCP_ERP_ACTION_RUNNING = 1,
64 ZFCP_ERP_ACTION_READY = 2,
67 enum zfcp_erp_act_result {
68 ZFCP_ERP_SUCCEEDED = 0,
70 ZFCP_ERP_CONTINUES = 2,
72 ZFCP_ERP_DISMISSED = 4,
76 static void zfcp_erp_adapter_block(struct zfcp_adapter *adapter, int mask)
78 zfcp_erp_clear_adapter_status(adapter,
79 ZFCP_STATUS_COMMON_UNBLOCKED | mask);
82 static int zfcp_erp_action_exists(struct zfcp_erp_action *act)
84 struct zfcp_erp_action *curr_act;
86 list_for_each_entry(curr_act, &act->adapter->erp_running_head, list)
88 return ZFCP_ERP_ACTION_RUNNING;
92 static void zfcp_erp_action_ready(struct zfcp_erp_action *act)
94 struct zfcp_adapter *adapter = act->adapter;
96 list_move(&act->list, &act->adapter->erp_ready_head);
97 zfcp_dbf_rec_run("erardy1", act);
98 wake_up(&adapter->erp_ready_wq);
99 zfcp_dbf_rec_run("erardy2", act);
102 static void zfcp_erp_action_dismiss(struct zfcp_erp_action *act)
104 act->status |= ZFCP_STATUS_ERP_DISMISSED;
105 if (zfcp_erp_action_exists(act) == ZFCP_ERP_ACTION_RUNNING)
106 zfcp_erp_action_ready(act);
109 static void zfcp_erp_action_dismiss_lun(struct scsi_device *sdev)
111 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
113 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
114 zfcp_erp_action_dismiss(&zfcp_sdev->erp_action);
117 static void zfcp_erp_action_dismiss_port(struct zfcp_port *port)
119 struct scsi_device *sdev;
121 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
122 zfcp_erp_action_dismiss(&port->erp_action);
124 spin_lock(port->adapter->scsi_host->host_lock);
125 __shost_for_each_device(sdev, port->adapter->scsi_host)
126 if (sdev_to_zfcp(sdev)->port == port)
127 zfcp_erp_action_dismiss_lun(sdev);
128 spin_unlock(port->adapter->scsi_host->host_lock);
132 static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
134 struct zfcp_port *port;
136 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
137 zfcp_erp_action_dismiss(&adapter->erp_action);
139 read_lock(&adapter->port_list_lock);
140 list_for_each_entry(port, &adapter->port_list, list)
141 zfcp_erp_action_dismiss_port(port);
142 read_unlock(&adapter->port_list_lock);
146 static int zfcp_erp_handle_failed(int want, struct zfcp_adapter *adapter,
147 struct zfcp_port *port,
148 struct scsi_device *sdev)
151 struct zfcp_scsi_dev *zsdev;
154 case ZFCP_ERP_ACTION_REOPEN_LUN:
155 zsdev = sdev_to_zfcp(sdev);
156 if (atomic_read(&zsdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
159 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
160 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
163 case ZFCP_ERP_ACTION_REOPEN_PORT:
164 if (atomic_read(&port->status) &
165 ZFCP_STATUS_COMMON_ERP_FAILED) {
167 /* ensure propagation of failed status to new devices */
168 zfcp_erp_set_port_status(
169 port, ZFCP_STATUS_COMMON_ERP_FAILED);
172 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
173 if (atomic_read(&adapter->status) &
174 ZFCP_STATUS_COMMON_ERP_FAILED) {
176 /* ensure propagation of failed status to new devices */
177 zfcp_erp_set_adapter_status(
178 adapter, ZFCP_STATUS_COMMON_ERP_FAILED);
189 static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
190 struct zfcp_port *port,
191 struct scsi_device *sdev)
194 int l_status, p_status, a_status;
195 struct zfcp_scsi_dev *zfcp_sdev;
198 case ZFCP_ERP_ACTION_REOPEN_LUN:
199 zfcp_sdev = sdev_to_zfcp(sdev);
200 l_status = atomic_read(&zfcp_sdev->status);
201 if (l_status & ZFCP_STATUS_COMMON_ERP_INUSE)
203 p_status = atomic_read(&port->status);
204 if (!(p_status & ZFCP_STATUS_COMMON_RUNNING) ||
205 p_status & ZFCP_STATUS_COMMON_ERP_FAILED)
207 if (!(p_status & ZFCP_STATUS_COMMON_UNBLOCKED))
208 need = ZFCP_ERP_ACTION_REOPEN_PORT;
210 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
211 p_status = atomic_read(&port->status);
212 if (!(p_status & ZFCP_STATUS_COMMON_OPEN))
213 need = ZFCP_ERP_ACTION_REOPEN_PORT;
215 case ZFCP_ERP_ACTION_REOPEN_PORT:
216 p_status = atomic_read(&port->status);
217 if (p_status & ZFCP_STATUS_COMMON_ERP_INUSE)
219 a_status = atomic_read(&adapter->status);
220 if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
221 a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
223 if (p_status & ZFCP_STATUS_COMMON_NOESC)
225 if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
226 need = ZFCP_ERP_ACTION_REOPEN_ADAPTER;
228 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
229 a_status = atomic_read(&adapter->status);
230 if (a_status & ZFCP_STATUS_COMMON_ERP_INUSE)
232 if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) &&
233 !(a_status & ZFCP_STATUS_COMMON_OPEN))
234 return 0; /* shutdown requested for closed adapter */
240 static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
241 struct zfcp_adapter *adapter,
242 struct zfcp_port *port,
243 struct scsi_device *sdev)
245 struct zfcp_erp_action *erp_action;
246 struct zfcp_scsi_dev *zfcp_sdev;
249 case ZFCP_ERP_ACTION_REOPEN_LUN:
250 zfcp_sdev = sdev_to_zfcp(sdev);
251 if (!(act_status & ZFCP_STATUS_ERP_NO_REF))
252 if (scsi_device_get(sdev))
254 atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE,
256 erp_action = &zfcp_sdev->erp_action;
257 WARN_ON_ONCE(erp_action->port != port);
258 WARN_ON_ONCE(erp_action->sdev != sdev);
259 if (!(atomic_read(&zfcp_sdev->status) &
260 ZFCP_STATUS_COMMON_RUNNING))
261 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
264 case ZFCP_ERP_ACTION_REOPEN_PORT:
265 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
266 if (!get_device(&port->dev))
268 zfcp_erp_action_dismiss_port(port);
269 atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
270 erp_action = &port->erp_action;
271 WARN_ON_ONCE(erp_action->port != port);
272 WARN_ON_ONCE(erp_action->sdev != NULL);
273 if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING))
274 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
277 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
278 kref_get(&adapter->ref);
279 zfcp_erp_action_dismiss_adapter(adapter);
280 atomic_or(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status);
281 erp_action = &adapter->erp_action;
282 WARN_ON_ONCE(erp_action->port != NULL);
283 WARN_ON_ONCE(erp_action->sdev != NULL);
284 if (!(atomic_read(&adapter->status) &
285 ZFCP_STATUS_COMMON_RUNNING))
286 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
293 WARN_ON_ONCE(erp_action->adapter != adapter);
294 memset(&erp_action->list, 0, sizeof(erp_action->list));
295 memset(&erp_action->timer, 0, sizeof(erp_action->timer));
296 erp_action->step = ZFCP_ERP_STEP_UNINITIALIZED;
297 erp_action->fsf_req_id = 0;
298 erp_action->action = need;
299 erp_action->status = act_status;
304 static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
305 struct zfcp_port *port,
306 struct scsi_device *sdev,
307 char *id, u32 act_status)
309 int retval = 1, need;
310 struct zfcp_erp_action *act;
312 need = zfcp_erp_handle_failed(want, adapter, port, sdev);
314 need = ZFCP_ERP_ACTION_FAILED; /* marker for trace */
318 if (!adapter->erp_thread) {
319 need = ZFCP_ERP_ACTION_NONE; /* marker for trace */
324 need = zfcp_erp_required_act(want, adapter, port, sdev);
328 act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev);
330 need |= ZFCP_ERP_ACTION_NONE; /* marker for trace */
333 atomic_or(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status);
334 ++adapter->erp_total_count;
335 list_add_tail(&act->list, &adapter->erp_ready_head);
336 wake_up(&adapter->erp_ready_wq);
339 zfcp_dbf_rec_trig(id, adapter, port, sdev, want, need);
343 void zfcp_erp_port_forced_no_port_dbf(char *id, struct zfcp_adapter *adapter,
344 u64 port_name, u32 port_id)
347 static /* don't waste stack */ struct zfcp_port tmpport;
349 write_lock_irqsave(&adapter->erp_lock, flags);
350 /* Stand-in zfcp port with fields just good enough for
351 * zfcp_dbf_rec_trig() and zfcp_dbf_set_common().
352 * Under lock because tmpport is static.
354 atomic_set(&tmpport.status, -1); /* unknown */
355 tmpport.wwpn = port_name;
356 tmpport.d_id = port_id;
357 zfcp_dbf_rec_trig(id, adapter, &tmpport, NULL,
358 ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
359 ZFCP_ERP_ACTION_NONE);
360 write_unlock_irqrestore(&adapter->erp_lock, flags);
363 static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter,
364 int clear_mask, char *id)
366 zfcp_erp_adapter_block(adapter, clear_mask);
367 zfcp_scsi_schedule_rports_block(adapter);
369 return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER,
370 adapter, NULL, NULL, id, 0);
374 * zfcp_erp_adapter_reopen - Reopen adapter.
375 * @adapter: Adapter to reopen.
376 * @clear: Status flags to clear.
377 * @id: Id for debug trace event.
379 void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, char *id)
383 zfcp_erp_adapter_block(adapter, clear);
384 zfcp_scsi_schedule_rports_block(adapter);
386 write_lock_irqsave(&adapter->erp_lock, flags);
387 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter,
389 write_unlock_irqrestore(&adapter->erp_lock, flags);
393 * zfcp_erp_adapter_shutdown - Shutdown adapter.
394 * @adapter: Adapter to shut down.
395 * @clear: Status flags to clear.
396 * @id: Id for debug trace event.
398 void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear,
401 int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
402 zfcp_erp_adapter_reopen(adapter, clear | flags, id);
406 * zfcp_erp_port_shutdown - Shutdown port
407 * @port: Port to shut down.
408 * @clear: Status flags to clear.
409 * @id: Id for debug trace event.
411 void zfcp_erp_port_shutdown(struct zfcp_port *port, int clear, char *id)
413 int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
414 zfcp_erp_port_reopen(port, clear | flags, id);
417 static void zfcp_erp_port_block(struct zfcp_port *port, int clear)
419 zfcp_erp_clear_port_status(port,
420 ZFCP_STATUS_COMMON_UNBLOCKED | clear);
423 static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear,
426 zfcp_erp_port_block(port, clear);
427 zfcp_scsi_schedule_rport_block(port);
429 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
430 port->adapter, port, NULL, id, 0);
434 * zfcp_erp_port_forced_reopen - Forced close of port and open again
435 * @port: Port to force close and to reopen.
436 * @clear: Status flags to clear.
437 * @id: Id for debug trace event.
439 void zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear, char *id)
442 struct zfcp_adapter *adapter = port->adapter;
444 write_lock_irqsave(&adapter->erp_lock, flags);
445 _zfcp_erp_port_forced_reopen(port, clear, id);
446 write_unlock_irqrestore(&adapter->erp_lock, flags);
449 static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id)
451 zfcp_erp_port_block(port, clear);
452 zfcp_scsi_schedule_rport_block(port);
454 return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT,
455 port->adapter, port, NULL, id, 0);
459 * zfcp_erp_port_reopen - trigger remote port recovery
460 * @port: port to recover
461 * @clear_mask: flags in port status to be cleared
462 * @id: Id for debug trace event.
464 * Returns 0 if recovery has been triggered, < 0 if not.
466 int zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id)
470 struct zfcp_adapter *adapter = port->adapter;
472 write_lock_irqsave(&adapter->erp_lock, flags);
473 retval = _zfcp_erp_port_reopen(port, clear, id);
474 write_unlock_irqrestore(&adapter->erp_lock, flags);
479 static void zfcp_erp_lun_block(struct scsi_device *sdev, int clear_mask)
481 zfcp_erp_clear_lun_status(sdev,
482 ZFCP_STATUS_COMMON_UNBLOCKED | clear_mask);
485 static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id,
488 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
489 struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
491 zfcp_erp_lun_block(sdev, clear);
493 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter,
494 zfcp_sdev->port, sdev, id, act_status);
498 * zfcp_erp_lun_reopen - initiate reopen of a LUN
499 * @sdev: SCSI device / LUN to be reopened
500 * @clear_mask: specifies flags in LUN status to be cleared
501 * @id: Id for debug trace event.
503 * Return: 0 on success, < 0 on error
505 void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id)
508 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
509 struct zfcp_port *port = zfcp_sdev->port;
510 struct zfcp_adapter *adapter = port->adapter;
512 write_lock_irqsave(&adapter->erp_lock, flags);
513 _zfcp_erp_lun_reopen(sdev, clear, id, 0);
514 write_unlock_irqrestore(&adapter->erp_lock, flags);
518 * zfcp_erp_lun_shutdown - Shutdown LUN
519 * @sdev: SCSI device / LUN to shut down.
520 * @clear: Status flags to clear.
521 * @id: Id for debug trace event.
523 void zfcp_erp_lun_shutdown(struct scsi_device *sdev, int clear, char *id)
525 int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
526 zfcp_erp_lun_reopen(sdev, clear | flags, id);
530 * zfcp_erp_lun_shutdown_wait - Shutdown LUN and wait for erp completion
531 * @sdev: SCSI device / LUN to shut down.
532 * @id: Id for debug trace event.
534 * Do not acquire a reference for the LUN when creating the ERP
535 * action. It is safe, because this function waits for the ERP to
536 * complete first. This allows to shutdown the LUN, even when the SCSI
537 * device is in the state SDEV_DEL when scsi_device_get will fail.
539 void zfcp_erp_lun_shutdown_wait(struct scsi_device *sdev, char *id)
542 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
543 struct zfcp_port *port = zfcp_sdev->port;
544 struct zfcp_adapter *adapter = port->adapter;
545 int clear = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
547 write_lock_irqsave(&adapter->erp_lock, flags);
548 _zfcp_erp_lun_reopen(sdev, clear, id, ZFCP_STATUS_ERP_NO_REF);
549 write_unlock_irqrestore(&adapter->erp_lock, flags);
551 zfcp_erp_wait(adapter);
554 static int zfcp_erp_status_change_set(unsigned long mask, atomic_t *status)
556 return (atomic_read(status) ^ mask) & mask;
559 static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter)
561 if (zfcp_erp_status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED,
563 zfcp_dbf_rec_run("eraubl1", &adapter->erp_action);
564 atomic_or(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status);
567 static void zfcp_erp_port_unblock(struct zfcp_port *port)
569 if (zfcp_erp_status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED,
571 zfcp_dbf_rec_run("erpubl1", &port->erp_action);
572 atomic_or(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status);
575 static void zfcp_erp_lun_unblock(struct scsi_device *sdev)
577 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
579 if (zfcp_erp_status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED,
581 zfcp_dbf_rec_run("erlubl1", &sdev_to_zfcp(sdev)->erp_action);
582 atomic_or(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status);
585 static void zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
587 list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
588 zfcp_dbf_rec_run("erator1", erp_action);
591 static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act)
593 struct zfcp_adapter *adapter = act->adapter;
594 struct zfcp_fsf_req *req;
596 if (!act->fsf_req_id)
599 spin_lock(&adapter->req_list->lock);
600 req = _zfcp_reqlist_find(adapter->req_list, act->fsf_req_id);
601 if (req && req->erp_action == act) {
602 if (act->status & (ZFCP_STATUS_ERP_DISMISSED |
603 ZFCP_STATUS_ERP_TIMEDOUT)) {
604 req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
605 zfcp_dbf_rec_run("erscf_1", act);
606 req->erp_action = NULL;
608 if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
609 zfcp_dbf_rec_run("erscf_2", act);
610 if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED)
614 spin_unlock(&adapter->req_list->lock);
618 * zfcp_erp_notify - Trigger ERP action.
619 * @erp_action: ERP action to continue.
620 * @set_mask: ERP action status flags to set.
622 void zfcp_erp_notify(struct zfcp_erp_action *erp_action, unsigned long set_mask)
624 struct zfcp_adapter *adapter = erp_action->adapter;
627 write_lock_irqsave(&adapter->erp_lock, flags);
628 if (zfcp_erp_action_exists(erp_action) == ZFCP_ERP_ACTION_RUNNING) {
629 erp_action->status |= set_mask;
630 zfcp_erp_action_ready(erp_action);
632 write_unlock_irqrestore(&adapter->erp_lock, flags);
636 * zfcp_erp_timeout_handler - Trigger ERP action from timed out ERP request
637 * @data: ERP action (from timer data)
639 void zfcp_erp_timeout_handler(struct timer_list *t)
641 struct zfcp_fsf_req *fsf_req = from_timer(fsf_req, t, timer);
642 struct zfcp_erp_action *act = fsf_req->erp_action;
644 zfcp_erp_notify(act, ZFCP_STATUS_ERP_TIMEDOUT);
647 static void zfcp_erp_memwait_handler(struct timer_list *t)
649 struct zfcp_erp_action *act = from_timer(act, t, timer);
651 zfcp_erp_notify(act, 0);
654 static void zfcp_erp_strategy_memwait(struct zfcp_erp_action *erp_action)
656 timer_setup(&erp_action->timer, zfcp_erp_memwait_handler, 0);
657 erp_action->timer.expires = jiffies + HZ;
658 add_timer(&erp_action->timer);
661 static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter,
664 struct zfcp_port *port;
666 read_lock(&adapter->port_list_lock);
667 list_for_each_entry(port, &adapter->port_list, list)
668 _zfcp_erp_port_reopen(port, clear, id);
669 read_unlock(&adapter->port_list_lock);
672 static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear,
675 struct scsi_device *sdev;
677 spin_lock(port->adapter->scsi_host->host_lock);
678 __shost_for_each_device(sdev, port->adapter->scsi_host)
679 if (sdev_to_zfcp(sdev)->port == port)
680 _zfcp_erp_lun_reopen(sdev, clear, id, 0);
681 spin_unlock(port->adapter->scsi_host->host_lock);
684 static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act)
686 switch (act->action) {
687 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
688 _zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1");
690 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
691 _zfcp_erp_port_forced_reopen(act->port, 0, "ersff_2");
693 case ZFCP_ERP_ACTION_REOPEN_PORT:
694 _zfcp_erp_port_reopen(act->port, 0, "ersff_3");
696 case ZFCP_ERP_ACTION_REOPEN_LUN:
697 _zfcp_erp_lun_reopen(act->sdev, 0, "ersff_4", 0);
702 static void zfcp_erp_strategy_followup_success(struct zfcp_erp_action *act)
704 switch (act->action) {
705 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
706 _zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1");
708 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
709 _zfcp_erp_port_reopen(act->port, 0, "ersfs_2");
711 case ZFCP_ERP_ACTION_REOPEN_PORT:
712 _zfcp_erp_lun_reopen_all(act->port, 0, "ersfs_3");
717 static void zfcp_erp_wakeup(struct zfcp_adapter *adapter)
721 read_lock_irqsave(&adapter->erp_lock, flags);
722 if (list_empty(&adapter->erp_ready_head) &&
723 list_empty(&adapter->erp_running_head)) {
724 atomic_andnot(ZFCP_STATUS_ADAPTER_ERP_PENDING,
726 wake_up(&adapter->erp_done_wqh);
728 read_unlock_irqrestore(&adapter->erp_lock, flags);
731 static void zfcp_erp_enqueue_ptp_port(struct zfcp_adapter *adapter)
733 struct zfcp_port *port;
734 port = zfcp_port_enqueue(adapter, adapter->peer_wwpn, 0,
736 if (IS_ERR(port)) /* error or port already attached */
738 _zfcp_erp_port_reopen(port, 0, "ereptp1");
741 static int zfcp_erp_adapter_strat_fsf_xconf(struct zfcp_erp_action *erp_action)
745 struct zfcp_adapter *adapter = erp_action->adapter;
747 atomic_andnot(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status);
749 for (retries = 7; retries; retries--) {
750 atomic_andnot(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
752 write_lock_irq(&adapter->erp_lock);
753 zfcp_erp_action_to_running(erp_action);
754 write_unlock_irq(&adapter->erp_lock);
755 if (zfcp_fsf_exchange_config_data(erp_action)) {
756 atomic_andnot(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
758 return ZFCP_ERP_FAILED;
761 wait_event(adapter->erp_ready_wq,
762 !list_empty(&adapter->erp_ready_head));
763 if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT)
766 if (!(atomic_read(&adapter->status) &
767 ZFCP_STATUS_ADAPTER_HOST_CON_INIT))
774 atomic_andnot(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
777 if (!(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_XCONFIG_OK))
778 return ZFCP_ERP_FAILED;
780 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
781 zfcp_erp_enqueue_ptp_port(adapter);
783 return ZFCP_ERP_SUCCEEDED;
786 static int zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *act)
789 struct zfcp_adapter *adapter = act->adapter;
791 write_lock_irq(&adapter->erp_lock);
792 zfcp_erp_action_to_running(act);
793 write_unlock_irq(&adapter->erp_lock);
795 ret = zfcp_fsf_exchange_port_data(act);
796 if (ret == -EOPNOTSUPP)
797 return ZFCP_ERP_SUCCEEDED;
799 return ZFCP_ERP_FAILED;
801 zfcp_dbf_rec_run("erasox1", act);
802 wait_event(adapter->erp_ready_wq,
803 !list_empty(&adapter->erp_ready_head));
804 zfcp_dbf_rec_run("erasox2", act);
805 if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
806 return ZFCP_ERP_FAILED;
808 return ZFCP_ERP_SUCCEEDED;
811 static int zfcp_erp_adapter_strategy_open_fsf(struct zfcp_erp_action *act)
813 if (zfcp_erp_adapter_strat_fsf_xconf(act) == ZFCP_ERP_FAILED)
814 return ZFCP_ERP_FAILED;
816 if (zfcp_erp_adapter_strategy_open_fsf_xport(act) == ZFCP_ERP_FAILED)
817 return ZFCP_ERP_FAILED;
819 if (mempool_resize(act->adapter->pool.sr_data,
820 act->adapter->stat_read_buf_num))
821 return ZFCP_ERP_FAILED;
823 if (mempool_resize(act->adapter->pool.status_read_req,
824 act->adapter->stat_read_buf_num))
825 return ZFCP_ERP_FAILED;
827 atomic_set(&act->adapter->stat_miss, act->adapter->stat_read_buf_num);
828 if (zfcp_status_read_refill(act->adapter))
829 return ZFCP_ERP_FAILED;
831 return ZFCP_ERP_SUCCEEDED;
834 static void zfcp_erp_adapter_strategy_close(struct zfcp_erp_action *act)
836 struct zfcp_adapter *adapter = act->adapter;
838 /* close queues to ensure that buffers are not accessed by adapter */
839 zfcp_qdio_close(adapter->qdio);
840 zfcp_fsf_req_dismiss_all(adapter);
841 adapter->fsf_req_seq_no = 0;
842 zfcp_fc_wka_ports_force_offline(adapter->gs);
843 /* all ports and LUNs are closed */
844 zfcp_erp_clear_adapter_status(adapter, ZFCP_STATUS_COMMON_OPEN);
846 atomic_andnot(ZFCP_STATUS_ADAPTER_XCONFIG_OK |
847 ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);
850 static int zfcp_erp_adapter_strategy_open(struct zfcp_erp_action *act)
852 struct zfcp_adapter *adapter = act->adapter;
854 if (zfcp_qdio_open(adapter->qdio)) {
855 atomic_andnot(ZFCP_STATUS_ADAPTER_XCONFIG_OK |
856 ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,
858 return ZFCP_ERP_FAILED;
861 if (zfcp_erp_adapter_strategy_open_fsf(act)) {
862 zfcp_erp_adapter_strategy_close(act);
863 return ZFCP_ERP_FAILED;
866 atomic_or(ZFCP_STATUS_COMMON_OPEN, &adapter->status);
868 return ZFCP_ERP_SUCCEEDED;
871 static int zfcp_erp_adapter_strategy(struct zfcp_erp_action *act)
873 struct zfcp_adapter *adapter = act->adapter;
875 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_OPEN) {
876 zfcp_erp_adapter_strategy_close(act);
877 if (act->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
878 return ZFCP_ERP_EXIT;
881 if (zfcp_erp_adapter_strategy_open(act)) {
883 return ZFCP_ERP_FAILED;
886 return ZFCP_ERP_SUCCEEDED;
889 static int zfcp_erp_port_forced_strategy_close(struct zfcp_erp_action *act)
893 retval = zfcp_fsf_close_physical_port(act);
894 if (retval == -ENOMEM)
895 return ZFCP_ERP_NOMEM;
896 act->step = ZFCP_ERP_STEP_PHYS_PORT_CLOSING;
898 return ZFCP_ERP_FAILED;
900 return ZFCP_ERP_CONTINUES;
903 static int zfcp_erp_port_forced_strategy(struct zfcp_erp_action *erp_action)
905 struct zfcp_port *port = erp_action->port;
906 int status = atomic_read(&port->status);
908 switch (erp_action->step) {
909 case ZFCP_ERP_STEP_UNINITIALIZED:
910 if ((status & ZFCP_STATUS_PORT_PHYS_OPEN) &&
911 (status & ZFCP_STATUS_COMMON_OPEN))
912 return zfcp_erp_port_forced_strategy_close(erp_action);
914 return ZFCP_ERP_FAILED;
916 case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
917 if (!(status & ZFCP_STATUS_PORT_PHYS_OPEN))
918 return ZFCP_ERP_SUCCEEDED;
920 return ZFCP_ERP_FAILED;
923 static int zfcp_erp_port_strategy_close(struct zfcp_erp_action *erp_action)
927 retval = zfcp_fsf_close_port(erp_action);
928 if (retval == -ENOMEM)
929 return ZFCP_ERP_NOMEM;
930 erp_action->step = ZFCP_ERP_STEP_PORT_CLOSING;
932 return ZFCP_ERP_FAILED;
933 return ZFCP_ERP_CONTINUES;
936 static int zfcp_erp_port_strategy_open_port(struct zfcp_erp_action *erp_action)
940 retval = zfcp_fsf_open_port(erp_action);
941 if (retval == -ENOMEM)
942 return ZFCP_ERP_NOMEM;
943 erp_action->step = ZFCP_ERP_STEP_PORT_OPENING;
945 return ZFCP_ERP_FAILED;
946 return ZFCP_ERP_CONTINUES;
949 static int zfcp_erp_open_ptp_port(struct zfcp_erp_action *act)
951 struct zfcp_adapter *adapter = act->adapter;
952 struct zfcp_port *port = act->port;
954 if (port->wwpn != adapter->peer_wwpn) {
955 zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED);
956 return ZFCP_ERP_FAILED;
958 port->d_id = adapter->peer_d_id;
959 return zfcp_erp_port_strategy_open_port(act);
962 static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
964 struct zfcp_adapter *adapter = act->adapter;
965 struct zfcp_port *port = act->port;
966 int p_status = atomic_read(&port->status);
969 case ZFCP_ERP_STEP_UNINITIALIZED:
970 case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
971 case ZFCP_ERP_STEP_PORT_CLOSING:
972 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
973 return zfcp_erp_open_ptp_port(act);
975 zfcp_fc_trigger_did_lookup(port);
976 return ZFCP_ERP_EXIT;
978 return zfcp_erp_port_strategy_open_port(act);
980 case ZFCP_ERP_STEP_PORT_OPENING:
981 /* D_ID might have changed during open */
982 if (p_status & ZFCP_STATUS_COMMON_OPEN) {
984 zfcp_fc_trigger_did_lookup(port);
985 return ZFCP_ERP_EXIT;
987 return ZFCP_ERP_SUCCEEDED;
989 if (port->d_id && !(p_status & ZFCP_STATUS_COMMON_NOESC)) {
991 return ZFCP_ERP_FAILED;
993 /* fall through otherwise */
995 return ZFCP_ERP_FAILED;
998 static int zfcp_erp_port_strategy(struct zfcp_erp_action *erp_action)
1000 struct zfcp_port *port = erp_action->port;
1001 int p_status = atomic_read(&port->status);
1003 if ((p_status & ZFCP_STATUS_COMMON_NOESC) &&
1004 !(p_status & ZFCP_STATUS_COMMON_OPEN))
1005 goto close_init_done;
1007 switch (erp_action->step) {
1008 case ZFCP_ERP_STEP_UNINITIALIZED:
1009 if (p_status & ZFCP_STATUS_COMMON_OPEN)
1010 return zfcp_erp_port_strategy_close(erp_action);
1013 case ZFCP_ERP_STEP_PORT_CLOSING:
1014 if (p_status & ZFCP_STATUS_COMMON_OPEN)
1015 return ZFCP_ERP_FAILED;
1020 if (erp_action->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
1021 return ZFCP_ERP_EXIT;
1023 return zfcp_erp_port_strategy_open_common(erp_action);
1026 static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev)
1028 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1030 atomic_andnot(ZFCP_STATUS_COMMON_ACCESS_DENIED,
1031 &zfcp_sdev->status);
1034 static int zfcp_erp_lun_strategy_close(struct zfcp_erp_action *erp_action)
1036 int retval = zfcp_fsf_close_lun(erp_action);
1037 if (retval == -ENOMEM)
1038 return ZFCP_ERP_NOMEM;
1039 erp_action->step = ZFCP_ERP_STEP_LUN_CLOSING;
1041 return ZFCP_ERP_FAILED;
1042 return ZFCP_ERP_CONTINUES;
1045 static int zfcp_erp_lun_strategy_open(struct zfcp_erp_action *erp_action)
1047 int retval = zfcp_fsf_open_lun(erp_action);
1048 if (retval == -ENOMEM)
1049 return ZFCP_ERP_NOMEM;
1050 erp_action->step = ZFCP_ERP_STEP_LUN_OPENING;
1052 return ZFCP_ERP_FAILED;
1053 return ZFCP_ERP_CONTINUES;
1056 static int zfcp_erp_lun_strategy(struct zfcp_erp_action *erp_action)
1058 struct scsi_device *sdev = erp_action->sdev;
1059 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1061 switch (erp_action->step) {
1062 case ZFCP_ERP_STEP_UNINITIALIZED:
1063 zfcp_erp_lun_strategy_clearstati(sdev);
1064 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1065 return zfcp_erp_lun_strategy_close(erp_action);
1066 /* already closed, fall through */
1067 case ZFCP_ERP_STEP_LUN_CLOSING:
1068 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1069 return ZFCP_ERP_FAILED;
1070 if (erp_action->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
1071 return ZFCP_ERP_EXIT;
1072 return zfcp_erp_lun_strategy_open(erp_action);
1074 case ZFCP_ERP_STEP_LUN_OPENING:
1075 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1076 return ZFCP_ERP_SUCCEEDED;
1078 return ZFCP_ERP_FAILED;
1081 static int zfcp_erp_strategy_check_lun(struct scsi_device *sdev, int result)
1083 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1086 case ZFCP_ERP_SUCCEEDED :
1087 atomic_set(&zfcp_sdev->erp_counter, 0);
1088 zfcp_erp_lun_unblock(sdev);
1090 case ZFCP_ERP_FAILED :
1091 atomic_inc(&zfcp_sdev->erp_counter);
1092 if (atomic_read(&zfcp_sdev->erp_counter) > ZFCP_MAX_ERPS) {
1093 dev_err(&zfcp_sdev->port->adapter->ccw_device->dev,
1094 "ERP failed for LUN 0x%016Lx on "
1096 (unsigned long long)zfcp_scsi_dev_lun(sdev),
1097 (unsigned long long)zfcp_sdev->port->wwpn);
1098 zfcp_erp_set_lun_status(sdev,
1099 ZFCP_STATUS_COMMON_ERP_FAILED);
1104 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1105 zfcp_erp_lun_block(sdev, 0);
1106 result = ZFCP_ERP_EXIT;
1111 static int zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1114 case ZFCP_ERP_SUCCEEDED :
1115 atomic_set(&port->erp_counter, 0);
1116 zfcp_erp_port_unblock(port);
1119 case ZFCP_ERP_FAILED :
1120 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_NOESC) {
1121 zfcp_erp_port_block(port, 0);
1122 result = ZFCP_ERP_EXIT;
1124 atomic_inc(&port->erp_counter);
1125 if (atomic_read(&port->erp_counter) > ZFCP_MAX_ERPS) {
1126 dev_err(&port->adapter->ccw_device->dev,
1127 "ERP failed for remote port 0x%016Lx\n",
1128 (unsigned long long)port->wwpn);
1129 zfcp_erp_set_port_status(port,
1130 ZFCP_STATUS_COMMON_ERP_FAILED);
1135 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1136 zfcp_erp_port_block(port, 0);
1137 result = ZFCP_ERP_EXIT;
1142 static int zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter,
1146 case ZFCP_ERP_SUCCEEDED :
1147 atomic_set(&adapter->erp_counter, 0);
1148 zfcp_erp_adapter_unblock(adapter);
1151 case ZFCP_ERP_FAILED :
1152 atomic_inc(&adapter->erp_counter);
1153 if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) {
1154 dev_err(&adapter->ccw_device->dev,
1155 "ERP cannot recover an error "
1156 "on the FCP device\n");
1157 zfcp_erp_set_adapter_status(adapter,
1158 ZFCP_STATUS_COMMON_ERP_FAILED);
1163 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1164 zfcp_erp_adapter_block(adapter, 0);
1165 result = ZFCP_ERP_EXIT;
1170 static int zfcp_erp_strategy_check_target(struct zfcp_erp_action *erp_action,
1173 struct zfcp_adapter *adapter = erp_action->adapter;
1174 struct zfcp_port *port = erp_action->port;
1175 struct scsi_device *sdev = erp_action->sdev;
1177 switch (erp_action->action) {
1179 case ZFCP_ERP_ACTION_REOPEN_LUN:
1180 result = zfcp_erp_strategy_check_lun(sdev, result);
1183 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1184 case ZFCP_ERP_ACTION_REOPEN_PORT:
1185 result = zfcp_erp_strategy_check_port(port, result);
1188 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1189 result = zfcp_erp_strategy_check_adapter(adapter, result);
1195 static int zfcp_erp_strat_change_det(atomic_t *target_status, u32 erp_status)
1197 int status = atomic_read(target_status);
1199 if ((status & ZFCP_STATUS_COMMON_RUNNING) &&
1200 (erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1201 return 1; /* take it online */
1203 if (!(status & ZFCP_STATUS_COMMON_RUNNING) &&
1204 !(erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1205 return 1; /* take it offline */
1210 static int zfcp_erp_strategy_statechange(struct zfcp_erp_action *act, int ret)
1212 int action = act->action;
1213 struct zfcp_adapter *adapter = act->adapter;
1214 struct zfcp_port *port = act->port;
1215 struct scsi_device *sdev = act->sdev;
1216 struct zfcp_scsi_dev *zfcp_sdev;
1217 u32 erp_status = act->status;
1220 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1221 if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) {
1222 _zfcp_erp_adapter_reopen(adapter,
1223 ZFCP_STATUS_COMMON_ERP_FAILED,
1225 return ZFCP_ERP_EXIT;
1229 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1230 case ZFCP_ERP_ACTION_REOPEN_PORT:
1231 if (zfcp_erp_strat_change_det(&port->status, erp_status)) {
1232 _zfcp_erp_port_reopen(port,
1233 ZFCP_STATUS_COMMON_ERP_FAILED,
1235 return ZFCP_ERP_EXIT;
1239 case ZFCP_ERP_ACTION_REOPEN_LUN:
1240 zfcp_sdev = sdev_to_zfcp(sdev);
1241 if (zfcp_erp_strat_change_det(&zfcp_sdev->status, erp_status)) {
1242 _zfcp_erp_lun_reopen(sdev,
1243 ZFCP_STATUS_COMMON_ERP_FAILED,
1245 return ZFCP_ERP_EXIT;
1252 static void zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
1254 struct zfcp_adapter *adapter = erp_action->adapter;
1255 struct zfcp_scsi_dev *zfcp_sdev;
1257 adapter->erp_total_count--;
1258 if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
1259 adapter->erp_low_mem_count--;
1260 erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
1263 list_del(&erp_action->list);
1264 zfcp_dbf_rec_run("eractd1", erp_action);
1266 switch (erp_action->action) {
1267 case ZFCP_ERP_ACTION_REOPEN_LUN:
1268 zfcp_sdev = sdev_to_zfcp(erp_action->sdev);
1269 atomic_andnot(ZFCP_STATUS_COMMON_ERP_INUSE,
1270 &zfcp_sdev->status);
1273 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1274 case ZFCP_ERP_ACTION_REOPEN_PORT:
1275 atomic_andnot(ZFCP_STATUS_COMMON_ERP_INUSE,
1276 &erp_action->port->status);
1279 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1280 atomic_andnot(ZFCP_STATUS_COMMON_ERP_INUSE,
1281 &erp_action->adapter->status);
1287 * zfcp_erp_try_rport_unblock - unblock rport if no more/new recovery
1288 * @port: zfcp_port whose fc_rport we should try to unblock
1290 static void zfcp_erp_try_rport_unblock(struct zfcp_port *port)
1292 unsigned long flags;
1293 struct zfcp_adapter *adapter = port->adapter;
1295 struct Scsi_Host *shost = adapter->scsi_host;
1296 struct scsi_device *sdev;
1298 write_lock_irqsave(&adapter->erp_lock, flags);
1299 port_status = atomic_read(&port->status);
1300 if ((port_status & ZFCP_STATUS_COMMON_UNBLOCKED) == 0 ||
1301 (port_status & (ZFCP_STATUS_COMMON_ERP_INUSE |
1302 ZFCP_STATUS_COMMON_ERP_FAILED)) != 0) {
1303 /* new ERP of severity >= port triggered elsewhere meanwhile or
1304 * local link down (adapter erp_failed but not clear unblock)
1306 zfcp_dbf_rec_run_lvl(4, "ertru_p", &port->erp_action);
1307 write_unlock_irqrestore(&adapter->erp_lock, flags);
1310 spin_lock(shost->host_lock);
1311 __shost_for_each_device(sdev, shost) {
1312 struct zfcp_scsi_dev *zsdev = sdev_to_zfcp(sdev);
1315 if (zsdev->port != port)
1317 /* LUN under port of interest */
1318 lun_status = atomic_read(&zsdev->status);
1319 if ((lun_status & ZFCP_STATUS_COMMON_ERP_FAILED) != 0)
1320 continue; /* unblock rport despite failed LUNs */
1321 /* LUN recovery not given up yet [maybe follow-up pending] */
1322 if ((lun_status & ZFCP_STATUS_COMMON_UNBLOCKED) == 0 ||
1323 (lun_status & ZFCP_STATUS_COMMON_ERP_INUSE) != 0) {
1325 * not yet unblocked [LUN recovery pending]
1326 * or meanwhile blocked [new LUN recovery triggered]
1328 zfcp_dbf_rec_run_lvl(4, "ertru_l", &zsdev->erp_action);
1329 spin_unlock(shost->host_lock);
1330 write_unlock_irqrestore(&adapter->erp_lock, flags);
1334 /* now port has no child or all children have completed recovery,
1335 * and no ERP of severity >= port was meanwhile triggered elsewhere
1337 zfcp_scsi_schedule_rport_register(port);
1338 spin_unlock(shost->host_lock);
1339 write_unlock_irqrestore(&adapter->erp_lock, flags);
1342 static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
1344 struct zfcp_adapter *adapter = act->adapter;
1345 struct zfcp_port *port = act->port;
1346 struct scsi_device *sdev = act->sdev;
1348 switch (act->action) {
1349 case ZFCP_ERP_ACTION_REOPEN_LUN:
1350 if (!(act->status & ZFCP_STATUS_ERP_NO_REF))
1351 scsi_device_put(sdev);
1352 zfcp_erp_try_rport_unblock(port);
1355 case ZFCP_ERP_ACTION_REOPEN_PORT:
1356 /* This switch case might also happen after a forced reopen
1357 * was successfully done and thus overwritten with a new
1358 * non-forced reopen at `ersfs_2'. In this case, we must not
1359 * do the clean-up of the non-forced version.
1361 if (act->step != ZFCP_ERP_STEP_UNINITIALIZED)
1362 if (result == ZFCP_ERP_SUCCEEDED)
1363 zfcp_erp_try_rport_unblock(port);
1365 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1366 put_device(&port->dev);
1369 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1370 if (result == ZFCP_ERP_SUCCEEDED) {
1371 register_service_level(&adapter->service_level);
1372 zfcp_fc_conditional_port_scan(adapter);
1373 queue_work(adapter->work_queue, &adapter->ns_up_work);
1375 unregister_service_level(&adapter->service_level);
1377 kref_put(&adapter->ref, zfcp_adapter_release);
1382 static int zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action)
1384 switch (erp_action->action) {
1385 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1386 return zfcp_erp_adapter_strategy(erp_action);
1387 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1388 return zfcp_erp_port_forced_strategy(erp_action);
1389 case ZFCP_ERP_ACTION_REOPEN_PORT:
1390 return zfcp_erp_port_strategy(erp_action);
1391 case ZFCP_ERP_ACTION_REOPEN_LUN:
1392 return zfcp_erp_lun_strategy(erp_action);
1394 return ZFCP_ERP_FAILED;
1397 static int zfcp_erp_strategy(struct zfcp_erp_action *erp_action)
1400 unsigned long flags;
1401 struct zfcp_adapter *adapter = erp_action->adapter;
1403 kref_get(&adapter->ref);
1405 write_lock_irqsave(&adapter->erp_lock, flags);
1406 zfcp_erp_strategy_check_fsfreq(erp_action);
1408 if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED) {
1409 zfcp_erp_action_dequeue(erp_action);
1410 retval = ZFCP_ERP_DISMISSED;
1414 if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
1415 retval = ZFCP_ERP_FAILED;
1419 zfcp_erp_action_to_running(erp_action);
1421 /* no lock to allow for blocking operations */
1422 write_unlock_irqrestore(&adapter->erp_lock, flags);
1423 retval = zfcp_erp_strategy_do_action(erp_action);
1424 write_lock_irqsave(&adapter->erp_lock, flags);
1426 if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED)
1427 retval = ZFCP_ERP_CONTINUES;
1430 case ZFCP_ERP_NOMEM:
1431 if (!(erp_action->status & ZFCP_STATUS_ERP_LOWMEM)) {
1432 ++adapter->erp_low_mem_count;
1433 erp_action->status |= ZFCP_STATUS_ERP_LOWMEM;
1435 if (adapter->erp_total_count == adapter->erp_low_mem_count)
1436 _zfcp_erp_adapter_reopen(adapter, 0, "erstgy1");
1438 zfcp_erp_strategy_memwait(erp_action);
1439 retval = ZFCP_ERP_CONTINUES;
1443 case ZFCP_ERP_CONTINUES:
1444 if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
1445 --adapter->erp_low_mem_count;
1446 erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
1452 retval = zfcp_erp_strategy_check_target(erp_action, retval);
1453 zfcp_erp_action_dequeue(erp_action);
1454 retval = zfcp_erp_strategy_statechange(erp_action, retval);
1455 if (retval == ZFCP_ERP_EXIT)
1457 if (retval == ZFCP_ERP_SUCCEEDED)
1458 zfcp_erp_strategy_followup_success(erp_action);
1459 if (retval == ZFCP_ERP_FAILED)
1460 zfcp_erp_strategy_followup_failed(erp_action);
1463 write_unlock_irqrestore(&adapter->erp_lock, flags);
1465 if (retval != ZFCP_ERP_CONTINUES)
1466 zfcp_erp_action_cleanup(erp_action, retval);
1468 kref_put(&adapter->ref, zfcp_adapter_release);
1472 static int zfcp_erp_thread(void *data)
1474 struct zfcp_adapter *adapter = (struct zfcp_adapter *) data;
1475 struct list_head *next;
1476 struct zfcp_erp_action *act;
1477 unsigned long flags;
1480 wait_event_interruptible(adapter->erp_ready_wq,
1481 !list_empty(&adapter->erp_ready_head) ||
1482 kthread_should_stop());
1484 if (kthread_should_stop())
1487 write_lock_irqsave(&adapter->erp_lock, flags);
1488 next = adapter->erp_ready_head.next;
1489 write_unlock_irqrestore(&adapter->erp_lock, flags);
1491 if (next != &adapter->erp_ready_head) {
1492 act = list_entry(next, struct zfcp_erp_action, list);
1494 /* there is more to come after dismission, no notify */
1495 if (zfcp_erp_strategy(act) != ZFCP_ERP_DISMISSED)
1496 zfcp_erp_wakeup(adapter);
1504 * zfcp_erp_thread_setup - Start ERP thread for adapter
1505 * @adapter: Adapter to start the ERP thread for
1507 * Returns 0 on success or error code from kernel_thread()
1509 int zfcp_erp_thread_setup(struct zfcp_adapter *adapter)
1511 struct task_struct *thread;
1513 thread = kthread_run(zfcp_erp_thread, adapter, "zfcperp%s",
1514 dev_name(&adapter->ccw_device->dev));
1515 if (IS_ERR(thread)) {
1516 dev_err(&adapter->ccw_device->dev,
1517 "Creating an ERP thread for the FCP device failed.\n");
1518 return PTR_ERR(thread);
1521 adapter->erp_thread = thread;
1526 * zfcp_erp_thread_kill - Stop ERP thread.
1527 * @adapter: Adapter where the ERP thread should be stopped.
1529 * The caller of this routine ensures that the specified adapter has
1530 * been shut down and that this operation has been completed. Thus,
1531 * there are no pending erp_actions which would need to be handled
1534 void zfcp_erp_thread_kill(struct zfcp_adapter *adapter)
1536 kthread_stop(adapter->erp_thread);
1537 adapter->erp_thread = NULL;
1538 WARN_ON(!list_empty(&adapter->erp_ready_head));
1539 WARN_ON(!list_empty(&adapter->erp_running_head));
1543 * zfcp_erp_wait - wait for completion of error recovery on an adapter
1544 * @adapter: adapter for which to wait for completion of its error recovery
1546 void zfcp_erp_wait(struct zfcp_adapter *adapter)
1548 wait_event(adapter->erp_done_wqh,
1549 !(atomic_read(&adapter->status) &
1550 ZFCP_STATUS_ADAPTER_ERP_PENDING));
1554 * zfcp_erp_set_adapter_status - set adapter status bits
1555 * @adapter: adapter to change the status
1556 * @mask: status bits to change
1558 * Changes in common status bits are propagated to attached ports and LUNs.
1560 void zfcp_erp_set_adapter_status(struct zfcp_adapter *adapter, u32 mask)
1562 struct zfcp_port *port;
1563 struct scsi_device *sdev;
1564 unsigned long flags;
1565 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1567 atomic_or(mask, &adapter->status);
1572 read_lock_irqsave(&adapter->port_list_lock, flags);
1573 list_for_each_entry(port, &adapter->port_list, list)
1574 atomic_or(common_mask, &port->status);
1575 read_unlock_irqrestore(&adapter->port_list_lock, flags);
1577 spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
1578 __shost_for_each_device(sdev, adapter->scsi_host)
1579 atomic_or(common_mask, &sdev_to_zfcp(sdev)->status);
1580 spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
1584 * zfcp_erp_clear_adapter_status - clear adapter status bits
1585 * @adapter: adapter to change the status
1586 * @mask: status bits to change
1588 * Changes in common status bits are propagated to attached ports and LUNs.
1590 void zfcp_erp_clear_adapter_status(struct zfcp_adapter *adapter, u32 mask)
1592 struct zfcp_port *port;
1593 struct scsi_device *sdev;
1594 unsigned long flags;
1595 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1596 u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
1598 atomic_andnot(mask, &adapter->status);
1604 atomic_set(&adapter->erp_counter, 0);
1606 read_lock_irqsave(&adapter->port_list_lock, flags);
1607 list_for_each_entry(port, &adapter->port_list, list) {
1608 atomic_andnot(common_mask, &port->status);
1610 atomic_set(&port->erp_counter, 0);
1612 read_unlock_irqrestore(&adapter->port_list_lock, flags);
1614 spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
1615 __shost_for_each_device(sdev, adapter->scsi_host) {
1616 atomic_andnot(common_mask, &sdev_to_zfcp(sdev)->status);
1618 atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1620 spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
1624 * zfcp_erp_set_port_status - set port status bits
1625 * @port: port to change the status
1626 * @mask: status bits to change
1628 * Changes in common status bits are propagated to attached LUNs.
1630 void zfcp_erp_set_port_status(struct zfcp_port *port, u32 mask)
1632 struct scsi_device *sdev;
1633 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1634 unsigned long flags;
1636 atomic_or(mask, &port->status);
1641 spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags);
1642 __shost_for_each_device(sdev, port->adapter->scsi_host)
1643 if (sdev_to_zfcp(sdev)->port == port)
1644 atomic_or(common_mask,
1645 &sdev_to_zfcp(sdev)->status);
1646 spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags);
1650 * zfcp_erp_clear_port_status - clear port status bits
1651 * @port: adapter to change the status
1652 * @mask: status bits to change
1654 * Changes in common status bits are propagated to attached LUNs.
1656 void zfcp_erp_clear_port_status(struct zfcp_port *port, u32 mask)
1658 struct scsi_device *sdev;
1659 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1660 u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
1661 unsigned long flags;
1663 atomic_andnot(mask, &port->status);
1669 atomic_set(&port->erp_counter, 0);
1671 spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags);
1672 __shost_for_each_device(sdev, port->adapter->scsi_host)
1673 if (sdev_to_zfcp(sdev)->port == port) {
1674 atomic_andnot(common_mask,
1675 &sdev_to_zfcp(sdev)->status);
1677 atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1679 spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags);
1683 * zfcp_erp_set_lun_status - set lun status bits
1684 * @sdev: SCSI device / lun to set the status bits
1685 * @mask: status bits to change
1687 void zfcp_erp_set_lun_status(struct scsi_device *sdev, u32 mask)
1689 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1691 atomic_or(mask, &zfcp_sdev->status);
1695 * zfcp_erp_clear_lun_status - clear lun status bits
1696 * @sdev: SCSi device / lun to clear the status bits
1697 * @mask: status bits to change
1699 void zfcp_erp_clear_lun_status(struct scsi_device *sdev, u32 mask)
1701 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1703 atomic_andnot(mask, &zfcp_sdev->status);
1705 if (mask & ZFCP_STATUS_COMMON_ERP_FAILED)
1706 atomic_set(&zfcp_sdev->erp_counter, 0);