4 * Error Recovery Procedures (ERP).
6 * Copyright IBM Corp. 2002, 2016
9 #define KMSG_COMPONENT "zfcp"
10 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
12 #include <linux/kthread.h>
14 #include "zfcp_reqlist.h"
16 #define ZFCP_MAX_ERPS 3
18 enum zfcp_erp_act_flags {
19 ZFCP_STATUS_ERP_TIMEDOUT = 0x10000000,
20 ZFCP_STATUS_ERP_CLOSE_ONLY = 0x01000000,
21 ZFCP_STATUS_ERP_DISMISSING = 0x00100000,
22 ZFCP_STATUS_ERP_DISMISSED = 0x00200000,
23 ZFCP_STATUS_ERP_LOWMEM = 0x00400000,
24 ZFCP_STATUS_ERP_NO_REF = 0x00800000,
28 ZFCP_ERP_STEP_UNINITIALIZED = 0x0000,
29 ZFCP_ERP_STEP_FSF_XCONFIG = 0x0001,
30 ZFCP_ERP_STEP_PHYS_PORT_CLOSING = 0x0010,
31 ZFCP_ERP_STEP_PORT_CLOSING = 0x0100,
32 ZFCP_ERP_STEP_PORT_OPENING = 0x0800,
33 ZFCP_ERP_STEP_LUN_CLOSING = 0x1000,
34 ZFCP_ERP_STEP_LUN_OPENING = 0x2000,
37 enum zfcp_erp_act_type {
38 ZFCP_ERP_ACTION_REOPEN_LUN = 1,
39 ZFCP_ERP_ACTION_REOPEN_PORT = 2,
40 ZFCP_ERP_ACTION_REOPEN_PORT_FORCED = 3,
41 ZFCP_ERP_ACTION_REOPEN_ADAPTER = 4,
44 enum zfcp_erp_act_state {
45 ZFCP_ERP_ACTION_RUNNING = 1,
46 ZFCP_ERP_ACTION_READY = 2,
49 enum zfcp_erp_act_result {
50 ZFCP_ERP_SUCCEEDED = 0,
52 ZFCP_ERP_CONTINUES = 2,
54 ZFCP_ERP_DISMISSED = 4,
58 static void zfcp_erp_adapter_block(struct zfcp_adapter *adapter, int mask)
60 zfcp_erp_clear_adapter_status(adapter,
61 ZFCP_STATUS_COMMON_UNBLOCKED | mask);
64 static int zfcp_erp_action_exists(struct zfcp_erp_action *act)
66 struct zfcp_erp_action *curr_act;
68 list_for_each_entry(curr_act, &act->adapter->erp_running_head, list)
70 return ZFCP_ERP_ACTION_RUNNING;
74 static void zfcp_erp_action_ready(struct zfcp_erp_action *act)
76 struct zfcp_adapter *adapter = act->adapter;
78 list_move(&act->list, &act->adapter->erp_ready_head);
79 zfcp_dbf_rec_run("erardy1", act);
80 wake_up(&adapter->erp_ready_wq);
81 zfcp_dbf_rec_run("erardy2", act);
84 static void zfcp_erp_action_dismiss(struct zfcp_erp_action *act)
86 act->status |= ZFCP_STATUS_ERP_DISMISSED;
87 if (zfcp_erp_action_exists(act) == ZFCP_ERP_ACTION_RUNNING)
88 zfcp_erp_action_ready(act);
91 static void zfcp_erp_action_dismiss_lun(struct scsi_device *sdev)
93 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
95 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
96 zfcp_erp_action_dismiss(&zfcp_sdev->erp_action);
99 static void zfcp_erp_action_dismiss_port(struct zfcp_port *port)
101 struct scsi_device *sdev;
103 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
104 zfcp_erp_action_dismiss(&port->erp_action);
106 spin_lock(port->adapter->scsi_host->host_lock);
107 __shost_for_each_device(sdev, port->adapter->scsi_host)
108 if (sdev_to_zfcp(sdev)->port == port)
109 zfcp_erp_action_dismiss_lun(sdev);
110 spin_unlock(port->adapter->scsi_host->host_lock);
114 static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
116 struct zfcp_port *port;
118 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
119 zfcp_erp_action_dismiss(&adapter->erp_action);
121 read_lock(&adapter->port_list_lock);
122 list_for_each_entry(port, &adapter->port_list, list)
123 zfcp_erp_action_dismiss_port(port);
124 read_unlock(&adapter->port_list_lock);
128 static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
129 struct zfcp_port *port,
130 struct scsi_device *sdev)
133 int l_status, p_status, a_status;
134 struct zfcp_scsi_dev *zfcp_sdev;
137 case ZFCP_ERP_ACTION_REOPEN_LUN:
138 zfcp_sdev = sdev_to_zfcp(sdev);
139 l_status = atomic_read(&zfcp_sdev->status);
140 if (l_status & ZFCP_STATUS_COMMON_ERP_INUSE)
142 p_status = atomic_read(&port->status);
143 if (!(p_status & ZFCP_STATUS_COMMON_RUNNING) ||
144 p_status & ZFCP_STATUS_COMMON_ERP_FAILED)
146 if (!(p_status & ZFCP_STATUS_COMMON_UNBLOCKED))
147 need = ZFCP_ERP_ACTION_REOPEN_PORT;
149 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
150 p_status = atomic_read(&port->status);
151 if (!(p_status & ZFCP_STATUS_COMMON_OPEN))
152 need = ZFCP_ERP_ACTION_REOPEN_PORT;
154 case ZFCP_ERP_ACTION_REOPEN_PORT:
155 p_status = atomic_read(&port->status);
156 if (p_status & ZFCP_STATUS_COMMON_ERP_INUSE)
158 a_status = atomic_read(&adapter->status);
159 if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
160 a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
162 if (p_status & ZFCP_STATUS_COMMON_NOESC)
164 if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
165 need = ZFCP_ERP_ACTION_REOPEN_ADAPTER;
167 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
168 a_status = atomic_read(&adapter->status);
169 if (a_status & ZFCP_STATUS_COMMON_ERP_INUSE)
171 if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) &&
172 !(a_status & ZFCP_STATUS_COMMON_OPEN))
173 return 0; /* shutdown requested for closed adapter */
179 static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
180 struct zfcp_adapter *adapter,
181 struct zfcp_port *port,
182 struct scsi_device *sdev)
184 struct zfcp_erp_action *erp_action;
185 struct zfcp_scsi_dev *zfcp_sdev;
188 case ZFCP_ERP_ACTION_REOPEN_LUN:
189 zfcp_sdev = sdev_to_zfcp(sdev);
190 if (!(act_status & ZFCP_STATUS_ERP_NO_REF))
191 if (scsi_device_get(sdev))
193 atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
195 erp_action = &zfcp_sdev->erp_action;
196 WARN_ON_ONCE(erp_action->port != port);
197 WARN_ON_ONCE(erp_action->sdev != sdev);
198 if (!(atomic_read(&zfcp_sdev->status) &
199 ZFCP_STATUS_COMMON_RUNNING))
200 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
203 case ZFCP_ERP_ACTION_REOPEN_PORT:
204 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
205 if (!get_device(&port->dev))
207 zfcp_erp_action_dismiss_port(port);
208 atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
209 erp_action = &port->erp_action;
210 WARN_ON_ONCE(erp_action->port != port);
211 WARN_ON_ONCE(erp_action->sdev != NULL);
212 if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING))
213 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
216 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
217 kref_get(&adapter->ref);
218 zfcp_erp_action_dismiss_adapter(adapter);
219 atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status);
220 erp_action = &adapter->erp_action;
221 WARN_ON_ONCE(erp_action->port != NULL);
222 WARN_ON_ONCE(erp_action->sdev != NULL);
223 if (!(atomic_read(&adapter->status) &
224 ZFCP_STATUS_COMMON_RUNNING))
225 act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
232 WARN_ON_ONCE(erp_action->adapter != adapter);
233 memset(&erp_action->list, 0, sizeof(erp_action->list));
234 memset(&erp_action->timer, 0, sizeof(erp_action->timer));
235 erp_action->step = ZFCP_ERP_STEP_UNINITIALIZED;
236 erp_action->fsf_req_id = 0;
237 erp_action->action = need;
238 erp_action->status = act_status;
243 static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
244 struct zfcp_port *port,
245 struct scsi_device *sdev,
246 char *id, u32 act_status)
248 int retval = 1, need;
249 struct zfcp_erp_action *act;
251 if (!adapter->erp_thread)
254 need = zfcp_erp_required_act(want, adapter, port, sdev);
258 act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev);
261 atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status);
262 ++adapter->erp_total_count;
263 list_add_tail(&act->list, &adapter->erp_ready_head);
264 wake_up(&adapter->erp_ready_wq);
267 zfcp_dbf_rec_trig(id, adapter, port, sdev, want, need);
271 static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter,
272 int clear_mask, char *id)
274 zfcp_erp_adapter_block(adapter, clear_mask);
275 zfcp_scsi_schedule_rports_block(adapter);
277 /* ensure propagation of failed status to new devices */
278 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
279 zfcp_erp_set_adapter_status(adapter,
280 ZFCP_STATUS_COMMON_ERP_FAILED);
283 return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER,
284 adapter, NULL, NULL, id, 0);
288 * zfcp_erp_adapter_reopen - Reopen adapter.
289 * @adapter: Adapter to reopen.
290 * @clear: Status flags to clear.
291 * @id: Id for debug trace event.
293 void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, char *id)
297 zfcp_erp_adapter_block(adapter, clear);
298 zfcp_scsi_schedule_rports_block(adapter);
300 write_lock_irqsave(&adapter->erp_lock, flags);
301 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
302 zfcp_erp_set_adapter_status(adapter,
303 ZFCP_STATUS_COMMON_ERP_FAILED);
305 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter,
307 write_unlock_irqrestore(&adapter->erp_lock, flags);
311 * zfcp_erp_adapter_shutdown - Shutdown adapter.
312 * @adapter: Adapter to shut down.
313 * @clear: Status flags to clear.
314 * @id: Id for debug trace event.
316 void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear,
319 int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
320 zfcp_erp_adapter_reopen(adapter, clear | flags, id);
324 * zfcp_erp_port_shutdown - Shutdown port
325 * @port: Port to shut down.
326 * @clear: Status flags to clear.
327 * @id: Id for debug trace event.
329 void zfcp_erp_port_shutdown(struct zfcp_port *port, int clear, char *id)
331 int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
332 zfcp_erp_port_reopen(port, clear | flags, id);
335 static void zfcp_erp_port_block(struct zfcp_port *port, int clear)
337 zfcp_erp_clear_port_status(port,
338 ZFCP_STATUS_COMMON_UNBLOCKED | clear);
341 static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear,
344 zfcp_erp_port_block(port, clear);
345 zfcp_scsi_schedule_rport_block(port);
347 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
350 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
351 port->adapter, port, NULL, id, 0);
355 * zfcp_erp_port_forced_reopen - Forced close of port and open again
356 * @port: Port to force close and to reopen.
357 * @clear: Status flags to clear.
358 * @id: Id for debug trace event.
360 void zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear, char *id)
363 struct zfcp_adapter *adapter = port->adapter;
365 write_lock_irqsave(&adapter->erp_lock, flags);
366 _zfcp_erp_port_forced_reopen(port, clear, id);
367 write_unlock_irqrestore(&adapter->erp_lock, flags);
370 static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id)
372 zfcp_erp_port_block(port, clear);
373 zfcp_scsi_schedule_rport_block(port);
375 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
376 /* ensure propagation of failed status to new devices */
377 zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED);
381 return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT,
382 port->adapter, port, NULL, id, 0);
386 * zfcp_erp_port_reopen - trigger remote port recovery
387 * @port: port to recover
388 * @clear_mask: flags in port status to be cleared
389 * @id: Id for debug trace event.
391 * Returns 0 if recovery has been triggered, < 0 if not.
393 int zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id)
397 struct zfcp_adapter *adapter = port->adapter;
399 write_lock_irqsave(&adapter->erp_lock, flags);
400 retval = _zfcp_erp_port_reopen(port, clear, id);
401 write_unlock_irqrestore(&adapter->erp_lock, flags);
406 static void zfcp_erp_lun_block(struct scsi_device *sdev, int clear_mask)
408 zfcp_erp_clear_lun_status(sdev,
409 ZFCP_STATUS_COMMON_UNBLOCKED | clear_mask);
412 static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id,
415 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
416 struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
418 zfcp_erp_lun_block(sdev, clear);
420 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
423 zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter,
424 zfcp_sdev->port, sdev, id, act_status);
428 * zfcp_erp_lun_reopen - initiate reopen of a LUN
429 * @sdev: SCSI device / LUN to be reopened
430 * @clear_mask: specifies flags in LUN status to be cleared
431 * @id: Id for debug trace event.
433 * Return: 0 on success, < 0 on error
435 void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id)
438 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
439 struct zfcp_port *port = zfcp_sdev->port;
440 struct zfcp_adapter *adapter = port->adapter;
442 write_lock_irqsave(&adapter->erp_lock, flags);
443 _zfcp_erp_lun_reopen(sdev, clear, id, 0);
444 write_unlock_irqrestore(&adapter->erp_lock, flags);
448 * zfcp_erp_lun_shutdown - Shutdown LUN
449 * @sdev: SCSI device / LUN to shut down.
450 * @clear: Status flags to clear.
451 * @id: Id for debug trace event.
453 void zfcp_erp_lun_shutdown(struct scsi_device *sdev, int clear, char *id)
455 int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
456 zfcp_erp_lun_reopen(sdev, clear | flags, id);
460 * zfcp_erp_lun_shutdown_wait - Shutdown LUN and wait for erp completion
461 * @sdev: SCSI device / LUN to shut down.
462 * @id: Id for debug trace event.
464 * Do not acquire a reference for the LUN when creating the ERP
465 * action. It is safe, because this function waits for the ERP to
466 * complete first. This allows to shutdown the LUN, even when the SCSI
467 * device is in the state SDEV_DEL when scsi_device_get will fail.
469 void zfcp_erp_lun_shutdown_wait(struct scsi_device *sdev, char *id)
472 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
473 struct zfcp_port *port = zfcp_sdev->port;
474 struct zfcp_adapter *adapter = port->adapter;
475 int clear = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
477 write_lock_irqsave(&adapter->erp_lock, flags);
478 _zfcp_erp_lun_reopen(sdev, clear, id, ZFCP_STATUS_ERP_NO_REF);
479 write_unlock_irqrestore(&adapter->erp_lock, flags);
481 zfcp_erp_wait(adapter);
484 static int status_change_set(unsigned long mask, atomic_t *status)
486 return (atomic_read(status) ^ mask) & mask;
489 static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter)
491 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status))
492 zfcp_dbf_rec_run("eraubl1", &adapter->erp_action);
493 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status);
496 static void zfcp_erp_port_unblock(struct zfcp_port *port)
498 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status))
499 zfcp_dbf_rec_run("erpubl1", &port->erp_action);
500 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status);
503 static void zfcp_erp_lun_unblock(struct scsi_device *sdev)
505 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
507 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status))
508 zfcp_dbf_rec_run("erlubl1", &sdev_to_zfcp(sdev)->erp_action);
509 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status);
512 static void zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
514 list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
515 zfcp_dbf_rec_run("erator1", erp_action);
518 static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act)
520 struct zfcp_adapter *adapter = act->adapter;
521 struct zfcp_fsf_req *req;
523 if (!act->fsf_req_id)
526 spin_lock(&adapter->req_list->lock);
527 req = _zfcp_reqlist_find(adapter->req_list, act->fsf_req_id);
528 if (req && req->erp_action == act) {
529 if (act->status & (ZFCP_STATUS_ERP_DISMISSED |
530 ZFCP_STATUS_ERP_TIMEDOUT)) {
531 req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
532 zfcp_dbf_rec_run("erscf_1", act);
533 req->erp_action = NULL;
535 if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
536 zfcp_dbf_rec_run("erscf_2", act);
537 if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED)
541 spin_unlock(&adapter->req_list->lock);
545 * zfcp_erp_notify - Trigger ERP action.
546 * @erp_action: ERP action to continue.
547 * @set_mask: ERP action status flags to set.
549 void zfcp_erp_notify(struct zfcp_erp_action *erp_action, unsigned long set_mask)
551 struct zfcp_adapter *adapter = erp_action->adapter;
554 write_lock_irqsave(&adapter->erp_lock, flags);
555 if (zfcp_erp_action_exists(erp_action) == ZFCP_ERP_ACTION_RUNNING) {
556 erp_action->status |= set_mask;
557 zfcp_erp_action_ready(erp_action);
559 write_unlock_irqrestore(&adapter->erp_lock, flags);
563 * zfcp_erp_timeout_handler - Trigger ERP action from timed out ERP request
564 * @data: ERP action (from timer data)
566 void zfcp_erp_timeout_handler(unsigned long data)
568 struct zfcp_erp_action *act = (struct zfcp_erp_action *) data;
569 zfcp_erp_notify(act, ZFCP_STATUS_ERP_TIMEDOUT);
572 static void zfcp_erp_memwait_handler(unsigned long data)
574 zfcp_erp_notify((struct zfcp_erp_action *)data, 0);
577 static void zfcp_erp_strategy_memwait(struct zfcp_erp_action *erp_action)
579 init_timer(&erp_action->timer);
580 erp_action->timer.function = zfcp_erp_memwait_handler;
581 erp_action->timer.data = (unsigned long) erp_action;
582 erp_action->timer.expires = jiffies + HZ;
583 add_timer(&erp_action->timer);
586 static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter,
589 struct zfcp_port *port;
591 read_lock(&adapter->port_list_lock);
592 list_for_each_entry(port, &adapter->port_list, list)
593 _zfcp_erp_port_reopen(port, clear, id);
594 read_unlock(&adapter->port_list_lock);
597 static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear,
600 struct scsi_device *sdev;
602 spin_lock(port->adapter->scsi_host->host_lock);
603 __shost_for_each_device(sdev, port->adapter->scsi_host)
604 if (sdev_to_zfcp(sdev)->port == port)
605 _zfcp_erp_lun_reopen(sdev, clear, id, 0);
606 spin_unlock(port->adapter->scsi_host->host_lock);
609 static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act)
611 switch (act->action) {
612 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
613 _zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1");
615 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
616 _zfcp_erp_port_forced_reopen(act->port, 0, "ersff_2");
618 case ZFCP_ERP_ACTION_REOPEN_PORT:
619 _zfcp_erp_port_reopen(act->port, 0, "ersff_3");
621 case ZFCP_ERP_ACTION_REOPEN_LUN:
622 _zfcp_erp_lun_reopen(act->sdev, 0, "ersff_4", 0);
627 static void zfcp_erp_strategy_followup_success(struct zfcp_erp_action *act)
629 switch (act->action) {
630 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
631 _zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1");
633 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
634 _zfcp_erp_port_reopen(act->port, 0, "ersfs_2");
636 case ZFCP_ERP_ACTION_REOPEN_PORT:
637 _zfcp_erp_lun_reopen_all(act->port, 0, "ersfs_3");
642 static void zfcp_erp_wakeup(struct zfcp_adapter *adapter)
646 read_lock_irqsave(&adapter->erp_lock, flags);
647 if (list_empty(&adapter->erp_ready_head) &&
648 list_empty(&adapter->erp_running_head)) {
649 atomic_clear_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING,
651 wake_up(&adapter->erp_done_wqh);
653 read_unlock_irqrestore(&adapter->erp_lock, flags);
656 static void zfcp_erp_enqueue_ptp_port(struct zfcp_adapter *adapter)
658 struct zfcp_port *port;
659 port = zfcp_port_enqueue(adapter, adapter->peer_wwpn, 0,
661 if (IS_ERR(port)) /* error or port already attached */
663 _zfcp_erp_port_reopen(port, 0, "ereptp1");
666 static int zfcp_erp_adapter_strat_fsf_xconf(struct zfcp_erp_action *erp_action)
670 struct zfcp_adapter *adapter = erp_action->adapter;
672 atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status);
674 for (retries = 7; retries; retries--) {
675 atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
677 write_lock_irq(&adapter->erp_lock);
678 zfcp_erp_action_to_running(erp_action);
679 write_unlock_irq(&adapter->erp_lock);
680 if (zfcp_fsf_exchange_config_data(erp_action)) {
681 atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
683 return ZFCP_ERP_FAILED;
686 wait_event(adapter->erp_ready_wq,
687 !list_empty(&adapter->erp_ready_head));
688 if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT)
691 if (!(atomic_read(&adapter->status) &
692 ZFCP_STATUS_ADAPTER_HOST_CON_INIT))
699 atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
702 if (!(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_XCONFIG_OK))
703 return ZFCP_ERP_FAILED;
705 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
706 zfcp_erp_enqueue_ptp_port(adapter);
708 return ZFCP_ERP_SUCCEEDED;
711 static int zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *act)
714 struct zfcp_adapter *adapter = act->adapter;
716 write_lock_irq(&adapter->erp_lock);
717 zfcp_erp_action_to_running(act);
718 write_unlock_irq(&adapter->erp_lock);
720 ret = zfcp_fsf_exchange_port_data(act);
721 if (ret == -EOPNOTSUPP)
722 return ZFCP_ERP_SUCCEEDED;
724 return ZFCP_ERP_FAILED;
726 zfcp_dbf_rec_run("erasox1", act);
727 wait_event(adapter->erp_ready_wq,
728 !list_empty(&adapter->erp_ready_head));
729 zfcp_dbf_rec_run("erasox2", act);
730 if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
731 return ZFCP_ERP_FAILED;
733 return ZFCP_ERP_SUCCEEDED;
736 static int zfcp_erp_adapter_strategy_open_fsf(struct zfcp_erp_action *act)
738 if (zfcp_erp_adapter_strat_fsf_xconf(act) == ZFCP_ERP_FAILED)
739 return ZFCP_ERP_FAILED;
741 if (zfcp_erp_adapter_strategy_open_fsf_xport(act) == ZFCP_ERP_FAILED)
742 return ZFCP_ERP_FAILED;
744 if (mempool_resize(act->adapter->pool.sr_data,
745 act->adapter->stat_read_buf_num, GFP_KERNEL))
746 return ZFCP_ERP_FAILED;
748 if (mempool_resize(act->adapter->pool.status_read_req,
749 act->adapter->stat_read_buf_num, GFP_KERNEL))
750 return ZFCP_ERP_FAILED;
752 atomic_set(&act->adapter->stat_miss, act->adapter->stat_read_buf_num);
753 if (zfcp_status_read_refill(act->adapter))
754 return ZFCP_ERP_FAILED;
756 return ZFCP_ERP_SUCCEEDED;
759 static void zfcp_erp_adapter_strategy_close(struct zfcp_erp_action *act)
761 struct zfcp_adapter *adapter = act->adapter;
763 /* close queues to ensure that buffers are not accessed by adapter */
764 zfcp_qdio_close(adapter->qdio);
765 zfcp_fsf_req_dismiss_all(adapter);
766 adapter->fsf_req_seq_no = 0;
767 zfcp_fc_wka_ports_force_offline(adapter->gs);
768 /* all ports and LUNs are closed */
769 zfcp_erp_clear_adapter_status(adapter, ZFCP_STATUS_COMMON_OPEN);
771 atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK |
772 ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);
775 static int zfcp_erp_adapter_strategy_open(struct zfcp_erp_action *act)
777 struct zfcp_adapter *adapter = act->adapter;
779 if (zfcp_qdio_open(adapter->qdio)) {
780 atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK |
781 ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,
783 return ZFCP_ERP_FAILED;
786 if (zfcp_erp_adapter_strategy_open_fsf(act)) {
787 zfcp_erp_adapter_strategy_close(act);
788 return ZFCP_ERP_FAILED;
791 atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &adapter->status);
793 return ZFCP_ERP_SUCCEEDED;
796 static int zfcp_erp_adapter_strategy(struct zfcp_erp_action *act)
798 struct zfcp_adapter *adapter = act->adapter;
800 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_OPEN) {
801 zfcp_erp_adapter_strategy_close(act);
802 if (act->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
803 return ZFCP_ERP_EXIT;
806 if (zfcp_erp_adapter_strategy_open(act)) {
808 return ZFCP_ERP_FAILED;
811 return ZFCP_ERP_SUCCEEDED;
814 static int zfcp_erp_port_forced_strategy_close(struct zfcp_erp_action *act)
818 retval = zfcp_fsf_close_physical_port(act);
819 if (retval == -ENOMEM)
820 return ZFCP_ERP_NOMEM;
821 act->step = ZFCP_ERP_STEP_PHYS_PORT_CLOSING;
823 return ZFCP_ERP_FAILED;
825 return ZFCP_ERP_CONTINUES;
828 static void zfcp_erp_port_strategy_clearstati(struct zfcp_port *port)
830 atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, &port->status);
833 static int zfcp_erp_port_forced_strategy(struct zfcp_erp_action *erp_action)
835 struct zfcp_port *port = erp_action->port;
836 int status = atomic_read(&port->status);
838 switch (erp_action->step) {
839 case ZFCP_ERP_STEP_UNINITIALIZED:
840 zfcp_erp_port_strategy_clearstati(port);
841 if ((status & ZFCP_STATUS_PORT_PHYS_OPEN) &&
842 (status & ZFCP_STATUS_COMMON_OPEN))
843 return zfcp_erp_port_forced_strategy_close(erp_action);
845 return ZFCP_ERP_FAILED;
847 case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
848 if (!(status & ZFCP_STATUS_PORT_PHYS_OPEN))
849 return ZFCP_ERP_SUCCEEDED;
851 return ZFCP_ERP_FAILED;
854 static int zfcp_erp_port_strategy_close(struct zfcp_erp_action *erp_action)
858 retval = zfcp_fsf_close_port(erp_action);
859 if (retval == -ENOMEM)
860 return ZFCP_ERP_NOMEM;
861 erp_action->step = ZFCP_ERP_STEP_PORT_CLOSING;
863 return ZFCP_ERP_FAILED;
864 return ZFCP_ERP_CONTINUES;
867 static int zfcp_erp_port_strategy_open_port(struct zfcp_erp_action *erp_action)
871 retval = zfcp_fsf_open_port(erp_action);
872 if (retval == -ENOMEM)
873 return ZFCP_ERP_NOMEM;
874 erp_action->step = ZFCP_ERP_STEP_PORT_OPENING;
876 return ZFCP_ERP_FAILED;
877 return ZFCP_ERP_CONTINUES;
880 static int zfcp_erp_open_ptp_port(struct zfcp_erp_action *act)
882 struct zfcp_adapter *adapter = act->adapter;
883 struct zfcp_port *port = act->port;
885 if (port->wwpn != adapter->peer_wwpn) {
886 zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED);
887 return ZFCP_ERP_FAILED;
889 port->d_id = adapter->peer_d_id;
890 return zfcp_erp_port_strategy_open_port(act);
893 static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
895 struct zfcp_adapter *adapter = act->adapter;
896 struct zfcp_port *port = act->port;
897 int p_status = atomic_read(&port->status);
900 case ZFCP_ERP_STEP_UNINITIALIZED:
901 case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
902 case ZFCP_ERP_STEP_PORT_CLOSING:
903 if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
904 return zfcp_erp_open_ptp_port(act);
906 zfcp_fc_trigger_did_lookup(port);
907 return ZFCP_ERP_EXIT;
909 return zfcp_erp_port_strategy_open_port(act);
911 case ZFCP_ERP_STEP_PORT_OPENING:
912 /* D_ID might have changed during open */
913 if (p_status & ZFCP_STATUS_COMMON_OPEN) {
915 zfcp_fc_trigger_did_lookup(port);
916 return ZFCP_ERP_EXIT;
918 return ZFCP_ERP_SUCCEEDED;
920 if (port->d_id && !(p_status & ZFCP_STATUS_COMMON_NOESC)) {
922 return ZFCP_ERP_FAILED;
924 /* fall through otherwise */
926 return ZFCP_ERP_FAILED;
929 static int zfcp_erp_port_strategy(struct zfcp_erp_action *erp_action)
931 struct zfcp_port *port = erp_action->port;
932 int p_status = atomic_read(&port->status);
934 if ((p_status & ZFCP_STATUS_COMMON_NOESC) &&
935 !(p_status & ZFCP_STATUS_COMMON_OPEN))
936 goto close_init_done;
938 switch (erp_action->step) {
939 case ZFCP_ERP_STEP_UNINITIALIZED:
940 zfcp_erp_port_strategy_clearstati(port);
941 if (p_status & ZFCP_STATUS_COMMON_OPEN)
942 return zfcp_erp_port_strategy_close(erp_action);
945 case ZFCP_ERP_STEP_PORT_CLOSING:
946 if (p_status & ZFCP_STATUS_COMMON_OPEN)
947 return ZFCP_ERP_FAILED;
952 if (erp_action->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
953 return ZFCP_ERP_EXIT;
955 return zfcp_erp_port_strategy_open_common(erp_action);
958 static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev)
960 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
962 atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
963 ZFCP_STATUS_LUN_SHARED | ZFCP_STATUS_LUN_READONLY,
967 static int zfcp_erp_lun_strategy_close(struct zfcp_erp_action *erp_action)
969 int retval = zfcp_fsf_close_lun(erp_action);
970 if (retval == -ENOMEM)
971 return ZFCP_ERP_NOMEM;
972 erp_action->step = ZFCP_ERP_STEP_LUN_CLOSING;
974 return ZFCP_ERP_FAILED;
975 return ZFCP_ERP_CONTINUES;
978 static int zfcp_erp_lun_strategy_open(struct zfcp_erp_action *erp_action)
980 int retval = zfcp_fsf_open_lun(erp_action);
981 if (retval == -ENOMEM)
982 return ZFCP_ERP_NOMEM;
983 erp_action->step = ZFCP_ERP_STEP_LUN_OPENING;
985 return ZFCP_ERP_FAILED;
986 return ZFCP_ERP_CONTINUES;
989 static int zfcp_erp_lun_strategy(struct zfcp_erp_action *erp_action)
991 struct scsi_device *sdev = erp_action->sdev;
992 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
994 switch (erp_action->step) {
995 case ZFCP_ERP_STEP_UNINITIALIZED:
996 zfcp_erp_lun_strategy_clearstati(sdev);
997 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
998 return zfcp_erp_lun_strategy_close(erp_action);
999 /* already closed, fall through */
1000 case ZFCP_ERP_STEP_LUN_CLOSING:
1001 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1002 return ZFCP_ERP_FAILED;
1003 if (erp_action->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
1004 return ZFCP_ERP_EXIT;
1005 return zfcp_erp_lun_strategy_open(erp_action);
1007 case ZFCP_ERP_STEP_LUN_OPENING:
1008 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1009 return ZFCP_ERP_SUCCEEDED;
1011 return ZFCP_ERP_FAILED;
1014 static int zfcp_erp_strategy_check_lun(struct scsi_device *sdev, int result)
1016 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1019 case ZFCP_ERP_SUCCEEDED :
1020 atomic_set(&zfcp_sdev->erp_counter, 0);
1021 zfcp_erp_lun_unblock(sdev);
1023 case ZFCP_ERP_FAILED :
1024 atomic_inc(&zfcp_sdev->erp_counter);
1025 if (atomic_read(&zfcp_sdev->erp_counter) > ZFCP_MAX_ERPS) {
1026 dev_err(&zfcp_sdev->port->adapter->ccw_device->dev,
1027 "ERP failed for LUN 0x%016Lx on "
1029 (unsigned long long)zfcp_scsi_dev_lun(sdev),
1030 (unsigned long long)zfcp_sdev->port->wwpn);
1031 zfcp_erp_set_lun_status(sdev,
1032 ZFCP_STATUS_COMMON_ERP_FAILED);
1037 if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1038 zfcp_erp_lun_block(sdev, 0);
1039 result = ZFCP_ERP_EXIT;
1044 static int zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1047 case ZFCP_ERP_SUCCEEDED :
1048 atomic_set(&port->erp_counter, 0);
1049 zfcp_erp_port_unblock(port);
1052 case ZFCP_ERP_FAILED :
1053 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_NOESC) {
1054 zfcp_erp_port_block(port, 0);
1055 result = ZFCP_ERP_EXIT;
1057 atomic_inc(&port->erp_counter);
1058 if (atomic_read(&port->erp_counter) > ZFCP_MAX_ERPS) {
1059 dev_err(&port->adapter->ccw_device->dev,
1060 "ERP failed for remote port 0x%016Lx\n",
1061 (unsigned long long)port->wwpn);
1062 zfcp_erp_set_port_status(port,
1063 ZFCP_STATUS_COMMON_ERP_FAILED);
1068 if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1069 zfcp_erp_port_block(port, 0);
1070 result = ZFCP_ERP_EXIT;
1075 static int zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter,
1079 case ZFCP_ERP_SUCCEEDED :
1080 atomic_set(&adapter->erp_counter, 0);
1081 zfcp_erp_adapter_unblock(adapter);
1084 case ZFCP_ERP_FAILED :
1085 atomic_inc(&adapter->erp_counter);
1086 if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) {
1087 dev_err(&adapter->ccw_device->dev,
1088 "ERP cannot recover an error "
1089 "on the FCP device\n");
1090 zfcp_erp_set_adapter_status(adapter,
1091 ZFCP_STATUS_COMMON_ERP_FAILED);
1096 if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1097 zfcp_erp_adapter_block(adapter, 0);
1098 result = ZFCP_ERP_EXIT;
1103 static int zfcp_erp_strategy_check_target(struct zfcp_erp_action *erp_action,
1106 struct zfcp_adapter *adapter = erp_action->adapter;
1107 struct zfcp_port *port = erp_action->port;
1108 struct scsi_device *sdev = erp_action->sdev;
1110 switch (erp_action->action) {
1112 case ZFCP_ERP_ACTION_REOPEN_LUN:
1113 result = zfcp_erp_strategy_check_lun(sdev, result);
1116 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1117 case ZFCP_ERP_ACTION_REOPEN_PORT:
1118 result = zfcp_erp_strategy_check_port(port, result);
1121 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1122 result = zfcp_erp_strategy_check_adapter(adapter, result);
1128 static int zfcp_erp_strat_change_det(atomic_t *target_status, u32 erp_status)
1130 int status = atomic_read(target_status);
1132 if ((status & ZFCP_STATUS_COMMON_RUNNING) &&
1133 (erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1134 return 1; /* take it online */
1136 if (!(status & ZFCP_STATUS_COMMON_RUNNING) &&
1137 !(erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1138 return 1; /* take it offline */
1143 static int zfcp_erp_strategy_statechange(struct zfcp_erp_action *act, int ret)
1145 int action = act->action;
1146 struct zfcp_adapter *adapter = act->adapter;
1147 struct zfcp_port *port = act->port;
1148 struct scsi_device *sdev = act->sdev;
1149 struct zfcp_scsi_dev *zfcp_sdev;
1150 u32 erp_status = act->status;
1153 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1154 if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) {
1155 _zfcp_erp_adapter_reopen(adapter,
1156 ZFCP_STATUS_COMMON_ERP_FAILED,
1158 return ZFCP_ERP_EXIT;
1162 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1163 case ZFCP_ERP_ACTION_REOPEN_PORT:
1164 if (zfcp_erp_strat_change_det(&port->status, erp_status)) {
1165 _zfcp_erp_port_reopen(port,
1166 ZFCP_STATUS_COMMON_ERP_FAILED,
1168 return ZFCP_ERP_EXIT;
1172 case ZFCP_ERP_ACTION_REOPEN_LUN:
1173 zfcp_sdev = sdev_to_zfcp(sdev);
1174 if (zfcp_erp_strat_change_det(&zfcp_sdev->status, erp_status)) {
1175 _zfcp_erp_lun_reopen(sdev,
1176 ZFCP_STATUS_COMMON_ERP_FAILED,
1178 return ZFCP_ERP_EXIT;
1185 static void zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
1187 struct zfcp_adapter *adapter = erp_action->adapter;
1188 struct zfcp_scsi_dev *zfcp_sdev;
1190 adapter->erp_total_count--;
1191 if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
1192 adapter->erp_low_mem_count--;
1193 erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
1196 list_del(&erp_action->list);
1197 zfcp_dbf_rec_run("eractd1", erp_action);
1199 switch (erp_action->action) {
1200 case ZFCP_ERP_ACTION_REOPEN_LUN:
1201 zfcp_sdev = sdev_to_zfcp(erp_action->sdev);
1202 atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
1203 &zfcp_sdev->status);
1206 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1207 case ZFCP_ERP_ACTION_REOPEN_PORT:
1208 atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
1209 &erp_action->port->status);
1212 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1213 atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
1214 &erp_action->adapter->status);
1220 * zfcp_erp_try_rport_unblock - unblock rport if no more/new recovery
1221 * @port: zfcp_port whose fc_rport we should try to unblock
1223 static void zfcp_erp_try_rport_unblock(struct zfcp_port *port)
1225 unsigned long flags;
1226 struct zfcp_adapter *adapter = port->adapter;
1228 struct Scsi_Host *shost = adapter->scsi_host;
1229 struct scsi_device *sdev;
1231 write_lock_irqsave(&adapter->erp_lock, flags);
1232 port_status = atomic_read(&port->status);
1233 if ((port_status & ZFCP_STATUS_COMMON_UNBLOCKED) == 0 ||
1234 (port_status & (ZFCP_STATUS_COMMON_ERP_INUSE |
1235 ZFCP_STATUS_COMMON_ERP_FAILED)) != 0) {
1236 /* new ERP of severity >= port triggered elsewhere meanwhile or
1237 * local link down (adapter erp_failed but not clear unblock)
1239 zfcp_dbf_rec_run_lvl(4, "ertru_p", &port->erp_action);
1240 write_unlock_irqrestore(&adapter->erp_lock, flags);
1243 spin_lock(shost->host_lock);
1244 __shost_for_each_device(sdev, shost) {
1245 struct zfcp_scsi_dev *zsdev = sdev_to_zfcp(sdev);
1248 if (zsdev->port != port)
1250 /* LUN under port of interest */
1251 lun_status = atomic_read(&zsdev->status);
1252 if ((lun_status & ZFCP_STATUS_COMMON_ERP_FAILED) != 0)
1253 continue; /* unblock rport despite failed LUNs */
1254 /* LUN recovery not given up yet [maybe follow-up pending] */
1255 if ((lun_status & ZFCP_STATUS_COMMON_UNBLOCKED) == 0 ||
1256 (lun_status & ZFCP_STATUS_COMMON_ERP_INUSE) != 0) {
1258 * not yet unblocked [LUN recovery pending]
1259 * or meanwhile blocked [new LUN recovery triggered]
1261 zfcp_dbf_rec_run_lvl(4, "ertru_l", &zsdev->erp_action);
1262 spin_unlock(shost->host_lock);
1263 write_unlock_irqrestore(&adapter->erp_lock, flags);
1267 /* now port has no child or all children have completed recovery,
1268 * and no ERP of severity >= port was meanwhile triggered elsewhere
1270 zfcp_scsi_schedule_rport_register(port);
1271 spin_unlock(shost->host_lock);
1272 write_unlock_irqrestore(&adapter->erp_lock, flags);
1275 static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
1277 struct zfcp_adapter *adapter = act->adapter;
1278 struct zfcp_port *port = act->port;
1279 struct scsi_device *sdev = act->sdev;
1281 switch (act->action) {
1282 case ZFCP_ERP_ACTION_REOPEN_LUN:
1283 if (!(act->status & ZFCP_STATUS_ERP_NO_REF))
1284 scsi_device_put(sdev);
1285 zfcp_erp_try_rport_unblock(port);
1288 case ZFCP_ERP_ACTION_REOPEN_PORT:
1289 /* This switch case might also happen after a forced reopen
1290 * was successfully done and thus overwritten with a new
1291 * non-forced reopen at `ersfs_2'. In this case, we must not
1292 * do the clean-up of the non-forced version.
1294 if (act->step != ZFCP_ERP_STEP_UNINITIALIZED)
1295 if (result == ZFCP_ERP_SUCCEEDED)
1296 zfcp_erp_try_rport_unblock(port);
1298 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1299 put_device(&port->dev);
1302 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1303 if (result == ZFCP_ERP_SUCCEEDED) {
1304 register_service_level(&adapter->service_level);
1305 queue_work(adapter->work_queue, &adapter->scan_work);
1306 queue_work(adapter->work_queue, &adapter->ns_up_work);
1308 unregister_service_level(&adapter->service_level);
1310 kref_put(&adapter->ref, zfcp_adapter_release);
1315 static int zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action)
1317 switch (erp_action->action) {
1318 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1319 return zfcp_erp_adapter_strategy(erp_action);
1320 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1321 return zfcp_erp_port_forced_strategy(erp_action);
1322 case ZFCP_ERP_ACTION_REOPEN_PORT:
1323 return zfcp_erp_port_strategy(erp_action);
1324 case ZFCP_ERP_ACTION_REOPEN_LUN:
1325 return zfcp_erp_lun_strategy(erp_action);
1327 return ZFCP_ERP_FAILED;
1330 static int zfcp_erp_strategy(struct zfcp_erp_action *erp_action)
1333 unsigned long flags;
1334 struct zfcp_adapter *adapter = erp_action->adapter;
1336 kref_get(&adapter->ref);
1338 write_lock_irqsave(&adapter->erp_lock, flags);
1339 zfcp_erp_strategy_check_fsfreq(erp_action);
1341 if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED) {
1342 zfcp_erp_action_dequeue(erp_action);
1343 retval = ZFCP_ERP_DISMISSED;
1347 if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
1348 retval = ZFCP_ERP_FAILED;
1352 zfcp_erp_action_to_running(erp_action);
1354 /* no lock to allow for blocking operations */
1355 write_unlock_irqrestore(&adapter->erp_lock, flags);
1356 retval = zfcp_erp_strategy_do_action(erp_action);
1357 write_lock_irqsave(&adapter->erp_lock, flags);
1359 if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED)
1360 retval = ZFCP_ERP_CONTINUES;
1363 case ZFCP_ERP_NOMEM:
1364 if (!(erp_action->status & ZFCP_STATUS_ERP_LOWMEM)) {
1365 ++adapter->erp_low_mem_count;
1366 erp_action->status |= ZFCP_STATUS_ERP_LOWMEM;
1368 if (adapter->erp_total_count == adapter->erp_low_mem_count)
1369 _zfcp_erp_adapter_reopen(adapter, 0, "erstgy1");
1371 zfcp_erp_strategy_memwait(erp_action);
1372 retval = ZFCP_ERP_CONTINUES;
1376 case ZFCP_ERP_CONTINUES:
1377 if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
1378 --adapter->erp_low_mem_count;
1379 erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
1385 retval = zfcp_erp_strategy_check_target(erp_action, retval);
1386 zfcp_erp_action_dequeue(erp_action);
1387 retval = zfcp_erp_strategy_statechange(erp_action, retval);
1388 if (retval == ZFCP_ERP_EXIT)
1390 if (retval == ZFCP_ERP_SUCCEEDED)
1391 zfcp_erp_strategy_followup_success(erp_action);
1392 if (retval == ZFCP_ERP_FAILED)
1393 zfcp_erp_strategy_followup_failed(erp_action);
1396 write_unlock_irqrestore(&adapter->erp_lock, flags);
1398 if (retval != ZFCP_ERP_CONTINUES)
1399 zfcp_erp_action_cleanup(erp_action, retval);
1401 kref_put(&adapter->ref, zfcp_adapter_release);
1405 static int zfcp_erp_thread(void *data)
1407 struct zfcp_adapter *adapter = (struct zfcp_adapter *) data;
1408 struct list_head *next;
1409 struct zfcp_erp_action *act;
1410 unsigned long flags;
1413 wait_event_interruptible(adapter->erp_ready_wq,
1414 !list_empty(&adapter->erp_ready_head) ||
1415 kthread_should_stop());
1417 if (kthread_should_stop())
1420 write_lock_irqsave(&adapter->erp_lock, flags);
1421 next = adapter->erp_ready_head.next;
1422 write_unlock_irqrestore(&adapter->erp_lock, flags);
1424 if (next != &adapter->erp_ready_head) {
1425 act = list_entry(next, struct zfcp_erp_action, list);
1427 /* there is more to come after dismission, no notify */
1428 if (zfcp_erp_strategy(act) != ZFCP_ERP_DISMISSED)
1429 zfcp_erp_wakeup(adapter);
1437 * zfcp_erp_thread_setup - Start ERP thread for adapter
1438 * @adapter: Adapter to start the ERP thread for
1440 * Returns 0 on success or error code from kernel_thread()
1442 int zfcp_erp_thread_setup(struct zfcp_adapter *adapter)
1444 struct task_struct *thread;
1446 thread = kthread_run(zfcp_erp_thread, adapter, "zfcperp%s",
1447 dev_name(&adapter->ccw_device->dev));
1448 if (IS_ERR(thread)) {
1449 dev_err(&adapter->ccw_device->dev,
1450 "Creating an ERP thread for the FCP device failed.\n");
1451 return PTR_ERR(thread);
1454 adapter->erp_thread = thread;
1459 * zfcp_erp_thread_kill - Stop ERP thread.
1460 * @adapter: Adapter where the ERP thread should be stopped.
1462 * The caller of this routine ensures that the specified adapter has
1463 * been shut down and that this operation has been completed. Thus,
1464 * there are no pending erp_actions which would need to be handled
1467 void zfcp_erp_thread_kill(struct zfcp_adapter *adapter)
1469 kthread_stop(adapter->erp_thread);
1470 adapter->erp_thread = NULL;
1471 WARN_ON(!list_empty(&adapter->erp_ready_head));
1472 WARN_ON(!list_empty(&adapter->erp_running_head));
1476 * zfcp_erp_wait - wait for completion of error recovery on an adapter
1477 * @adapter: adapter for which to wait for completion of its error recovery
1479 void zfcp_erp_wait(struct zfcp_adapter *adapter)
1481 wait_event(adapter->erp_done_wqh,
1482 !(atomic_read(&adapter->status) &
1483 ZFCP_STATUS_ADAPTER_ERP_PENDING));
1487 * zfcp_erp_set_adapter_status - set adapter status bits
1488 * @adapter: adapter to change the status
1489 * @mask: status bits to change
1491 * Changes in common status bits are propagated to attached ports and LUNs.
1493 void zfcp_erp_set_adapter_status(struct zfcp_adapter *adapter, u32 mask)
1495 struct zfcp_port *port;
1496 struct scsi_device *sdev;
1497 unsigned long flags;
1498 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1500 atomic_set_mask(mask, &adapter->status);
1505 read_lock_irqsave(&adapter->port_list_lock, flags);
1506 list_for_each_entry(port, &adapter->port_list, list)
1507 atomic_set_mask(common_mask, &port->status);
1508 read_unlock_irqrestore(&adapter->port_list_lock, flags);
1510 spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
1511 __shost_for_each_device(sdev, adapter->scsi_host)
1512 atomic_set_mask(common_mask, &sdev_to_zfcp(sdev)->status);
1513 spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
1517 * zfcp_erp_clear_adapter_status - clear adapter status bits
1518 * @adapter: adapter to change the status
1519 * @mask: status bits to change
1521 * Changes in common status bits are propagated to attached ports and LUNs.
1523 void zfcp_erp_clear_adapter_status(struct zfcp_adapter *adapter, u32 mask)
1525 struct zfcp_port *port;
1526 struct scsi_device *sdev;
1527 unsigned long flags;
1528 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1529 u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
1531 atomic_clear_mask(mask, &adapter->status);
1537 atomic_set(&adapter->erp_counter, 0);
1539 read_lock_irqsave(&adapter->port_list_lock, flags);
1540 list_for_each_entry(port, &adapter->port_list, list) {
1541 atomic_clear_mask(common_mask, &port->status);
1543 atomic_set(&port->erp_counter, 0);
1545 read_unlock_irqrestore(&adapter->port_list_lock, flags);
1547 spin_lock_irqsave(adapter->scsi_host->host_lock, flags);
1548 __shost_for_each_device(sdev, adapter->scsi_host) {
1549 atomic_clear_mask(common_mask, &sdev_to_zfcp(sdev)->status);
1551 atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1553 spin_unlock_irqrestore(adapter->scsi_host->host_lock, flags);
1557 * zfcp_erp_set_port_status - set port status bits
1558 * @port: port to change the status
1559 * @mask: status bits to change
1561 * Changes in common status bits are propagated to attached LUNs.
1563 void zfcp_erp_set_port_status(struct zfcp_port *port, u32 mask)
1565 struct scsi_device *sdev;
1566 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1567 unsigned long flags;
1569 atomic_set_mask(mask, &port->status);
1574 spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags);
1575 __shost_for_each_device(sdev, port->adapter->scsi_host)
1576 if (sdev_to_zfcp(sdev)->port == port)
1577 atomic_set_mask(common_mask,
1578 &sdev_to_zfcp(sdev)->status);
1579 spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags);
1583 * zfcp_erp_clear_port_status - clear port status bits
1584 * @port: adapter to change the status
1585 * @mask: status bits to change
1587 * Changes in common status bits are propagated to attached LUNs.
1589 void zfcp_erp_clear_port_status(struct zfcp_port *port, u32 mask)
1591 struct scsi_device *sdev;
1592 u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1593 u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
1594 unsigned long flags;
1596 atomic_clear_mask(mask, &port->status);
1602 atomic_set(&port->erp_counter, 0);
1604 spin_lock_irqsave(port->adapter->scsi_host->host_lock, flags);
1605 __shost_for_each_device(sdev, port->adapter->scsi_host)
1606 if (sdev_to_zfcp(sdev)->port == port) {
1607 atomic_clear_mask(common_mask,
1608 &sdev_to_zfcp(sdev)->status);
1610 atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1612 spin_unlock_irqrestore(port->adapter->scsi_host->host_lock, flags);
1616 * zfcp_erp_set_lun_status - set lun status bits
1617 * @sdev: SCSI device / lun to set the status bits
1618 * @mask: status bits to change
1620 void zfcp_erp_set_lun_status(struct scsi_device *sdev, u32 mask)
1622 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1624 atomic_set_mask(mask, &zfcp_sdev->status);
1628 * zfcp_erp_clear_lun_status - clear lun status bits
1629 * @sdev: SCSi device / lun to clear the status bits
1630 * @mask: status bits to change
1632 void zfcp_erp_clear_lun_status(struct scsi_device *sdev, u32 mask)
1634 struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1636 atomic_clear_mask(mask, &zfcp_sdev->status);
1638 if (mask & ZFCP_STATUS_COMMON_ERP_FAILED)
1639 atomic_set(&zfcp_sdev->erp_counter, 0);