xref: /openbmc/linux/drivers/s390/scsi/zfcp_erp.c (revision baa7eb025ab14f3cba2e35c0a8648f9c9f01d24f)
1 /*
2  * zfcp device driver
3  *
4  * Error Recovery Procedures (ERP).
5  *
6  * Copyright IBM Corporation 2002, 2010
7  */
8 
9 #define KMSG_COMPONENT "zfcp"
10 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
11 
12 #include <linux/kthread.h>
13 #include "zfcp_ext.h"
14 #include "zfcp_reqlist.h"
15 
16 #define ZFCP_MAX_ERPS                   3
17 
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,
25 };
26 
27 enum zfcp_erp_steps {
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,
35 };
36 
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,
42 };
43 
44 enum zfcp_erp_act_state {
45 	ZFCP_ERP_ACTION_RUNNING = 1,
46 	ZFCP_ERP_ACTION_READY   = 2,
47 };
48 
49 enum zfcp_erp_act_result {
50 	ZFCP_ERP_SUCCEEDED = 0,
51 	ZFCP_ERP_FAILED    = 1,
52 	ZFCP_ERP_CONTINUES = 2,
53 	ZFCP_ERP_EXIT      = 3,
54 	ZFCP_ERP_DISMISSED = 4,
55 	ZFCP_ERP_NOMEM     = 5,
56 };
57 
58 static void zfcp_erp_adapter_block(struct zfcp_adapter *adapter, int mask)
59 {
60 	zfcp_erp_clear_adapter_status(adapter,
61 				       ZFCP_STATUS_COMMON_UNBLOCKED | mask);
62 }
63 
64 static int zfcp_erp_action_exists(struct zfcp_erp_action *act)
65 {
66 	struct zfcp_erp_action *curr_act;
67 
68 	list_for_each_entry(curr_act, &act->adapter->erp_running_head, list)
69 		if (act == curr_act)
70 			return ZFCP_ERP_ACTION_RUNNING;
71 	return 0;
72 }
73 
74 static void zfcp_erp_action_ready(struct zfcp_erp_action *act)
75 {
76 	struct zfcp_adapter *adapter = act->adapter;
77 
78 	list_move(&act->list, &act->adapter->erp_ready_head);
79 	zfcp_dbf_rec_action("erardy1", act);
80 	wake_up(&adapter->erp_ready_wq);
81 	zfcp_dbf_rec_thread("erardy2", adapter->dbf);
82 }
83 
84 static void zfcp_erp_action_dismiss(struct zfcp_erp_action *act)
85 {
86 	act->status |= ZFCP_STATUS_ERP_DISMISSED;
87 	if (zfcp_erp_action_exists(act) == ZFCP_ERP_ACTION_RUNNING)
88 		zfcp_erp_action_ready(act);
89 }
90 
91 static void zfcp_erp_action_dismiss_lun(struct scsi_device *sdev)
92 {
93 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
94 
95 	if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
96 		zfcp_erp_action_dismiss(&zfcp_sdev->erp_action);
97 }
98 
99 static void zfcp_erp_action_dismiss_port(struct zfcp_port *port)
100 {
101 	struct scsi_device *sdev;
102 
103 	if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
104 		zfcp_erp_action_dismiss(&port->erp_action);
105 	else
106 		shost_for_each_device(sdev, port->adapter->scsi_host)
107 			if (sdev_to_zfcp(sdev)->port == port)
108 				zfcp_erp_action_dismiss_lun(sdev);
109 }
110 
111 static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
112 {
113 	struct zfcp_port *port;
114 
115 	if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_INUSE)
116 		zfcp_erp_action_dismiss(&adapter->erp_action);
117 	else {
118 		read_lock(&adapter->port_list_lock);
119 		list_for_each_entry(port, &adapter->port_list, list)
120 		    zfcp_erp_action_dismiss_port(port);
121 		read_unlock(&adapter->port_list_lock);
122 	}
123 }
124 
125 static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
126 				 struct zfcp_port *port,
127 				 struct scsi_device *sdev)
128 {
129 	int need = want;
130 	int l_status, p_status, a_status;
131 	struct zfcp_scsi_dev *zfcp_sdev;
132 
133 	switch (want) {
134 	case ZFCP_ERP_ACTION_REOPEN_LUN:
135 		zfcp_sdev = sdev_to_zfcp(sdev);
136 		l_status = atomic_read(&zfcp_sdev->status);
137 		if (l_status & ZFCP_STATUS_COMMON_ERP_INUSE)
138 			return 0;
139 		p_status = atomic_read(&port->status);
140 		if (!(p_status & ZFCP_STATUS_COMMON_RUNNING) ||
141 		      p_status & ZFCP_STATUS_COMMON_ERP_FAILED)
142 			return 0;
143 		if (!(p_status & ZFCP_STATUS_COMMON_UNBLOCKED))
144 			need = ZFCP_ERP_ACTION_REOPEN_PORT;
145 		/* fall through */
146 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
147 		p_status = atomic_read(&port->status);
148 		if (!(p_status & ZFCP_STATUS_COMMON_OPEN))
149 			need = ZFCP_ERP_ACTION_REOPEN_PORT;
150 		/* fall through */
151 	case ZFCP_ERP_ACTION_REOPEN_PORT:
152 		p_status = atomic_read(&port->status);
153 		if (p_status & ZFCP_STATUS_COMMON_ERP_INUSE)
154 			return 0;
155 		a_status = atomic_read(&adapter->status);
156 		if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
157 		      a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
158 			return 0;
159 		if (p_status & ZFCP_STATUS_COMMON_NOESC)
160 			return need;
161 		if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
162 			need = ZFCP_ERP_ACTION_REOPEN_ADAPTER;
163 		/* fall through */
164 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
165 		a_status = atomic_read(&adapter->status);
166 		if (a_status & ZFCP_STATUS_COMMON_ERP_INUSE)
167 			return 0;
168 		if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) &&
169 		    !(a_status & ZFCP_STATUS_COMMON_OPEN))
170 			return 0; /* shutdown requested for closed adapter */
171 	}
172 
173 	return need;
174 }
175 
176 static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status,
177 						  struct zfcp_adapter *adapter,
178 						  struct zfcp_port *port,
179 						  struct scsi_device *sdev)
180 {
181 	struct zfcp_erp_action *erp_action;
182 	struct zfcp_scsi_dev *zfcp_sdev;
183 
184 	switch (need) {
185 	case ZFCP_ERP_ACTION_REOPEN_LUN:
186 		zfcp_sdev = sdev_to_zfcp(sdev);
187 		if (!(act_status & ZFCP_STATUS_ERP_NO_REF))
188 			if (scsi_device_get(sdev))
189 				return NULL;
190 		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
191 				&zfcp_sdev->status);
192 		erp_action = &zfcp_sdev->erp_action;
193 		memset(erp_action, 0, sizeof(struct zfcp_erp_action));
194 		erp_action->port = port;
195 		erp_action->sdev = sdev;
196 		if (!(atomic_read(&zfcp_sdev->status) &
197 		      ZFCP_STATUS_COMMON_RUNNING))
198 			act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
199 		break;
200 
201 	case ZFCP_ERP_ACTION_REOPEN_PORT:
202 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
203 		if (!get_device(&port->dev))
204 			return NULL;
205 		zfcp_erp_action_dismiss_port(port);
206 		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &port->status);
207 		erp_action = &port->erp_action;
208 		memset(erp_action, 0, sizeof(struct zfcp_erp_action));
209 		erp_action->port = port;
210 		if (!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_RUNNING))
211 			act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
212 		break;
213 
214 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
215 		kref_get(&adapter->ref);
216 		zfcp_erp_action_dismiss_adapter(adapter);
217 		atomic_set_mask(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status);
218 		erp_action = &adapter->erp_action;
219 		memset(erp_action, 0, sizeof(struct zfcp_erp_action));
220 		if (!(atomic_read(&adapter->status) &
221 		      ZFCP_STATUS_COMMON_RUNNING))
222 			act_status |= ZFCP_STATUS_ERP_CLOSE_ONLY;
223 		break;
224 
225 	default:
226 		return NULL;
227 	}
228 
229 	erp_action->adapter = adapter;
230 	erp_action->action = need;
231 	erp_action->status = act_status;
232 
233 	return erp_action;
234 }
235 
236 static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
237 				   struct zfcp_port *port,
238 				   struct scsi_device *sdev,
239 				   char *id, void *ref, u32 act_status)
240 {
241 	int retval = 1, need;
242 	struct zfcp_erp_action *act = NULL;
243 
244 	if (!adapter->erp_thread)
245 		return -EIO;
246 
247 	need = zfcp_erp_required_act(want, adapter, port, sdev);
248 	if (!need)
249 		goto out;
250 
251 	act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev);
252 	if (!act)
253 		goto out;
254 	atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status);
255 	++adapter->erp_total_count;
256 	list_add_tail(&act->list, &adapter->erp_ready_head);
257 	wake_up(&adapter->erp_ready_wq);
258 	zfcp_dbf_rec_thread("eracte1", adapter->dbf);
259 	retval = 0;
260  out:
261 	zfcp_dbf_rec_trigger(id, ref, want, need, act, adapter, port, sdev);
262 	return retval;
263 }
264 
265 static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter,
266 				    int clear_mask, char *id, void *ref)
267 {
268 	zfcp_erp_adapter_block(adapter, clear_mask);
269 	zfcp_scsi_schedule_rports_block(adapter);
270 
271 	/* ensure propagation of failed status to new devices */
272 	if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
273 		zfcp_erp_set_adapter_status(adapter,
274 					    ZFCP_STATUS_COMMON_ERP_FAILED);
275 		return -EIO;
276 	}
277 	return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER,
278 				       adapter, NULL, NULL, id, ref, 0);
279 }
280 
281 /**
282  * zfcp_erp_adapter_reopen - Reopen adapter.
283  * @adapter: Adapter to reopen.
284  * @clear: Status flags to clear.
285  * @id: Id for debug trace event.
286  * @ref: Reference for debug trace event.
287  */
288 void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear,
289 			     char *id, void *ref)
290 {
291 	unsigned long flags;
292 
293 	zfcp_erp_adapter_block(adapter, clear);
294 	zfcp_scsi_schedule_rports_block(adapter);
295 
296 	write_lock_irqsave(&adapter->erp_lock, flags);
297 	if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
298 		zfcp_erp_set_adapter_status(adapter,
299 					    ZFCP_STATUS_COMMON_ERP_FAILED);
300 	else
301 		zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter,
302 					NULL, NULL, id, ref, 0);
303 	write_unlock_irqrestore(&adapter->erp_lock, flags);
304 }
305 
306 /**
307  * zfcp_erp_adapter_shutdown - Shutdown adapter.
308  * @adapter: Adapter to shut down.
309  * @clear: Status flags to clear.
310  * @id: Id for debug trace event.
311  * @ref: Reference for debug trace event.
312  */
313 void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear,
314 			       char *id, void *ref)
315 {
316 	int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
317 	zfcp_erp_adapter_reopen(adapter, clear | flags, id, ref);
318 }
319 
320 /**
321  * zfcp_erp_port_shutdown - Shutdown port
322  * @port: Port to shut down.
323  * @clear: Status flags to clear.
324  * @id: Id for debug trace event.
325  * @ref: Reference for debug trace event.
326  */
327 void zfcp_erp_port_shutdown(struct zfcp_port *port, int clear, char *id,
328 			    void *ref)
329 {
330 	int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
331 	zfcp_erp_port_reopen(port, clear | flags, id, ref);
332 }
333 
334 static void zfcp_erp_port_block(struct zfcp_port *port, int clear)
335 {
336 	zfcp_erp_clear_port_status(port,
337 				    ZFCP_STATUS_COMMON_UNBLOCKED | clear);
338 }
339 
340 static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port,
341 					 int clear, char *id, void *ref)
342 {
343 	zfcp_erp_port_block(port, clear);
344 	zfcp_scsi_schedule_rport_block(port);
345 
346 	if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
347 		return;
348 
349 	zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED,
350 				port->adapter, port, NULL, id, ref, 0);
351 }
352 
353 /**
354  * zfcp_erp_port_forced_reopen - Forced close of port and open again
355  * @port: Port to force close and to reopen.
356  * @id: Id for debug trace event.
357  * @ref: Reference for debug trace event.
358  */
359 void zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear, char *id,
360 				 void *ref)
361 {
362 	unsigned long flags;
363 	struct zfcp_adapter *adapter = port->adapter;
364 
365 	write_lock_irqsave(&adapter->erp_lock, flags);
366 	_zfcp_erp_port_forced_reopen(port, clear, id, ref);
367 	write_unlock_irqrestore(&adapter->erp_lock, flags);
368 }
369 
370 static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id,
371 				 void *ref)
372 {
373 	zfcp_erp_port_block(port, clear);
374 	zfcp_scsi_schedule_rport_block(port);
375 
376 	if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
377 		/* ensure propagation of failed status to new devices */
378 		zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED);
379 		return -EIO;
380 	}
381 
382 	return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT,
383 				       port->adapter, port, NULL, id, ref, 0);
384 }
385 
386 /**
387  * zfcp_erp_port_reopen - trigger remote port recovery
388  * @port: port to recover
389  * @clear_mask: flags in port status to be cleared
390  *
391  * Returns 0 if recovery has been triggered, < 0 if not.
392  */
393 int zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id, void *ref)
394 {
395 	int retval;
396 	unsigned long flags;
397 	struct zfcp_adapter *adapter = port->adapter;
398 
399 	write_lock_irqsave(&adapter->erp_lock, flags);
400 	retval = _zfcp_erp_port_reopen(port, clear, id, ref);
401 	write_unlock_irqrestore(&adapter->erp_lock, flags);
402 
403 	return retval;
404 }
405 
406 static void zfcp_erp_lun_block(struct scsi_device *sdev, int clear_mask)
407 {
408 	zfcp_erp_clear_lun_status(sdev,
409 				  ZFCP_STATUS_COMMON_UNBLOCKED | clear_mask);
410 }
411 
412 static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id,
413 				 void *ref, u32 act_status)
414 {
415 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
416 	struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
417 
418 	zfcp_erp_lun_block(sdev, clear);
419 
420 	if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED)
421 		return;
422 
423 	zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter,
424 				zfcp_sdev->port, sdev, id, ref, act_status);
425 }
426 
427 /**
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  * Return: 0 on success, < 0 on error
432  */
433 void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id,
434 			 void *ref)
435 {
436 	unsigned long flags;
437 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
438 	struct zfcp_port *port = zfcp_sdev->port;
439 	struct zfcp_adapter *adapter = port->adapter;
440 
441 	write_lock_irqsave(&adapter->erp_lock, flags);
442 	_zfcp_erp_lun_reopen(sdev, clear, id, ref, 0);
443 	write_unlock_irqrestore(&adapter->erp_lock, flags);
444 }
445 
446 /**
447  * zfcp_erp_lun_shutdown - Shutdown LUN
448  * @sdev: SCSI device / LUN to shut down.
449  * @clear: Status flags to clear.
450  * @id: Id for debug trace event.
451  * @ref: Reference for debug trace event.
452  */
453 void zfcp_erp_lun_shutdown(struct scsi_device *sdev, int clear, char *id,
454 			   void *ref)
455 {
456 	int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
457 	zfcp_erp_lun_reopen(sdev, clear | flags, id, ref);
458 }
459 
460 /**
461  * zfcp_erp_lun_shutdown_wait - Shutdown LUN and wait for erp completion
462  * @sdev: SCSI device / LUN to shut down.
463  * @id: Id for debug trace event.
464  *
465  * Do not acquire a reference for the LUN when creating the ERP
466  * action. It is safe, because this function waits for the ERP to
467  * complete first. This allows to shutdown the LUN, even when the SCSI
468  * device is in the state SDEV_DEL when scsi_device_get will fail.
469  */
470 void zfcp_erp_lun_shutdown_wait(struct scsi_device *sdev, char *id)
471 {
472 	unsigned long flags;
473 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
474 	struct zfcp_port *port = zfcp_sdev->port;
475 	struct zfcp_adapter *adapter = port->adapter;
476 	int clear = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED;
477 
478 	write_lock_irqsave(&adapter->erp_lock, flags);
479 	_zfcp_erp_lun_reopen(sdev, clear, id, NULL, ZFCP_STATUS_ERP_NO_REF);
480 	write_unlock_irqrestore(&adapter->erp_lock, flags);
481 
482 	zfcp_erp_wait(adapter);
483 }
484 
485 static int status_change_set(unsigned long mask, atomic_t *status)
486 {
487 	return (atomic_read(status) ^ mask) & mask;
488 }
489 
490 static void zfcp_erp_adapter_unblock(struct zfcp_adapter *adapter)
491 {
492 	if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status))
493 		zfcp_dbf_rec_adapter("eraubl1", NULL, adapter->dbf);
494 	atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->status);
495 }
496 
497 static void zfcp_erp_port_unblock(struct zfcp_port *port)
498 {
499 	if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status))
500 		zfcp_dbf_rec_port("erpubl1", NULL, port);
501 	atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &port->status);
502 }
503 
504 static void zfcp_erp_lun_unblock(struct scsi_device *sdev)
505 {
506 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
507 
508 	if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status))
509 		zfcp_dbf_rec_lun("erlubl1", NULL, sdev);
510 	atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->status);
511 }
512 
513 static void zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
514 {
515 	list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
516 	zfcp_dbf_rec_action("erator1", erp_action);
517 }
518 
519 static void zfcp_erp_strategy_check_fsfreq(struct zfcp_erp_action *act)
520 {
521 	struct zfcp_adapter *adapter = act->adapter;
522 	struct zfcp_fsf_req *req;
523 
524 	if (!act->fsf_req_id)
525 		return;
526 
527 	spin_lock(&adapter->req_list->lock);
528 	req = _zfcp_reqlist_find(adapter->req_list, act->fsf_req_id);
529 	if (req && req->erp_action == act) {
530 		if (act->status & (ZFCP_STATUS_ERP_DISMISSED |
531 				   ZFCP_STATUS_ERP_TIMEDOUT)) {
532 			req->status |= ZFCP_STATUS_FSFREQ_DISMISSED;
533 			zfcp_dbf_rec_action("erscf_1", act);
534 			req->erp_action = NULL;
535 		}
536 		if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
537 			zfcp_dbf_rec_action("erscf_2", act);
538 		if (req->status & ZFCP_STATUS_FSFREQ_DISMISSED)
539 			act->fsf_req_id = 0;
540 	} else
541 		act->fsf_req_id = 0;
542 	spin_unlock(&adapter->req_list->lock);
543 }
544 
545 /**
546  * zfcp_erp_notify - Trigger ERP action.
547  * @erp_action: ERP action to continue.
548  * @set_mask: ERP action status flags to set.
549  */
550 void zfcp_erp_notify(struct zfcp_erp_action *erp_action, unsigned long set_mask)
551 {
552 	struct zfcp_adapter *adapter = erp_action->adapter;
553 	unsigned long flags;
554 
555 	write_lock_irqsave(&adapter->erp_lock, flags);
556 	if (zfcp_erp_action_exists(erp_action) == ZFCP_ERP_ACTION_RUNNING) {
557 		erp_action->status |= set_mask;
558 		zfcp_erp_action_ready(erp_action);
559 	}
560 	write_unlock_irqrestore(&adapter->erp_lock, flags);
561 }
562 
563 /**
564  * zfcp_erp_timeout_handler - Trigger ERP action from timed out ERP request
565  * @data: ERP action (from timer data)
566  */
567 void zfcp_erp_timeout_handler(unsigned long data)
568 {
569 	struct zfcp_erp_action *act = (struct zfcp_erp_action *) data;
570 	zfcp_erp_notify(act, ZFCP_STATUS_ERP_TIMEDOUT);
571 }
572 
573 static void zfcp_erp_memwait_handler(unsigned long data)
574 {
575 	zfcp_erp_notify((struct zfcp_erp_action *)data, 0);
576 }
577 
578 static void zfcp_erp_strategy_memwait(struct zfcp_erp_action *erp_action)
579 {
580 	init_timer(&erp_action->timer);
581 	erp_action->timer.function = zfcp_erp_memwait_handler;
582 	erp_action->timer.data = (unsigned long) erp_action;
583 	erp_action->timer.expires = jiffies + HZ;
584 	add_timer(&erp_action->timer);
585 }
586 
587 static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter,
588 				      int clear, char *id, void *ref)
589 {
590 	struct zfcp_port *port;
591 
592 	read_lock(&adapter->port_list_lock);
593 	list_for_each_entry(port, &adapter->port_list, list)
594 		_zfcp_erp_port_reopen(port, clear, id, ref);
595 	read_unlock(&adapter->port_list_lock);
596 }
597 
598 static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear,
599 				     char *id, void *ref)
600 {
601 	struct scsi_device *sdev;
602 
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, ref, 0);
606 }
607 
608 static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act)
609 {
610 	switch (act->action) {
611 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
612 		_zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1", NULL);
613 		break;
614 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
615 		_zfcp_erp_port_forced_reopen(act->port, 0, "ersff_2", NULL);
616 		break;
617 	case ZFCP_ERP_ACTION_REOPEN_PORT:
618 		_zfcp_erp_port_reopen(act->port, 0, "ersff_3", NULL);
619 		break;
620 	case ZFCP_ERP_ACTION_REOPEN_LUN:
621 		_zfcp_erp_lun_reopen(act->sdev, 0, "ersff_4", NULL, 0);
622 		break;
623 	}
624 }
625 
626 static void zfcp_erp_strategy_followup_success(struct zfcp_erp_action *act)
627 {
628 	switch (act->action) {
629 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
630 		_zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1", NULL);
631 		break;
632 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
633 		_zfcp_erp_port_reopen(act->port, 0, "ersfs_2", NULL);
634 		break;
635 	case ZFCP_ERP_ACTION_REOPEN_PORT:
636 		_zfcp_erp_lun_reopen_all(act->port, 0, "ersfs_3", NULL);
637 		break;
638 	}
639 }
640 
641 static void zfcp_erp_wakeup(struct zfcp_adapter *adapter)
642 {
643 	unsigned long flags;
644 
645 	read_lock_irqsave(&adapter->erp_lock, flags);
646 	if (list_empty(&adapter->erp_ready_head) &&
647 	    list_empty(&adapter->erp_running_head)) {
648 			atomic_clear_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING,
649 					  &adapter->status);
650 			wake_up(&adapter->erp_done_wqh);
651 	}
652 	read_unlock_irqrestore(&adapter->erp_lock, flags);
653 }
654 
655 static int zfcp_erp_adapter_strategy_open_qdio(struct zfcp_erp_action *act)
656 {
657 	struct zfcp_qdio *qdio = act->adapter->qdio;
658 
659 	if (zfcp_qdio_open(qdio))
660 		return ZFCP_ERP_FAILED;
661 	init_waitqueue_head(&qdio->req_q_wq);
662 	atomic_set_mask(ZFCP_STATUS_ADAPTER_QDIOUP, &act->adapter->status);
663 	return ZFCP_ERP_SUCCEEDED;
664 }
665 
666 static void zfcp_erp_enqueue_ptp_port(struct zfcp_adapter *adapter)
667 {
668 	struct zfcp_port *port;
669 	port = zfcp_port_enqueue(adapter, adapter->peer_wwpn, 0,
670 				 adapter->peer_d_id);
671 	if (IS_ERR(port)) /* error or port already attached */
672 		return;
673 	_zfcp_erp_port_reopen(port, 0, "ereptp1", NULL);
674 }
675 
676 static int zfcp_erp_adapter_strat_fsf_xconf(struct zfcp_erp_action *erp_action)
677 {
678 	int retries;
679 	int sleep = 1;
680 	struct zfcp_adapter *adapter = erp_action->adapter;
681 
682 	atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status);
683 
684 	for (retries = 7; retries; retries--) {
685 		atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
686 				  &adapter->status);
687 		write_lock_irq(&adapter->erp_lock);
688 		zfcp_erp_action_to_running(erp_action);
689 		write_unlock_irq(&adapter->erp_lock);
690 		if (zfcp_fsf_exchange_config_data(erp_action)) {
691 			atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
692 					  &adapter->status);
693 			return ZFCP_ERP_FAILED;
694 		}
695 
696 		zfcp_dbf_rec_thread_lock("erasfx1", adapter->dbf);
697 		wait_event(adapter->erp_ready_wq,
698 			   !list_empty(&adapter->erp_ready_head));
699 		zfcp_dbf_rec_thread_lock("erasfx2", adapter->dbf);
700 		if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT)
701 			break;
702 
703 		if (!(atomic_read(&adapter->status) &
704 		      ZFCP_STATUS_ADAPTER_HOST_CON_INIT))
705 			break;
706 
707 		ssleep(sleep);
708 		sleep *= 2;
709 	}
710 
711 	atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
712 			  &adapter->status);
713 
714 	if (!(atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_XCONFIG_OK))
715 		return ZFCP_ERP_FAILED;
716 
717 	if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
718 		zfcp_erp_enqueue_ptp_port(adapter);
719 
720 	return ZFCP_ERP_SUCCEEDED;
721 }
722 
723 static int zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *act)
724 {
725 	int ret;
726 	struct zfcp_adapter *adapter = act->adapter;
727 
728 	write_lock_irq(&adapter->erp_lock);
729 	zfcp_erp_action_to_running(act);
730 	write_unlock_irq(&adapter->erp_lock);
731 
732 	ret = zfcp_fsf_exchange_port_data(act);
733 	if (ret == -EOPNOTSUPP)
734 		return ZFCP_ERP_SUCCEEDED;
735 	if (ret)
736 		return ZFCP_ERP_FAILED;
737 
738 	zfcp_dbf_rec_thread_lock("erasox1", adapter->dbf);
739 	wait_event(adapter->erp_ready_wq,
740 		   !list_empty(&adapter->erp_ready_head));
741 	zfcp_dbf_rec_thread_lock("erasox2", adapter->dbf);
742 	if (act->status & ZFCP_STATUS_ERP_TIMEDOUT)
743 		return ZFCP_ERP_FAILED;
744 
745 	return ZFCP_ERP_SUCCEEDED;
746 }
747 
748 static int zfcp_erp_adapter_strategy_open_fsf(struct zfcp_erp_action *act)
749 {
750 	if (zfcp_erp_adapter_strat_fsf_xconf(act) == ZFCP_ERP_FAILED)
751 		return ZFCP_ERP_FAILED;
752 
753 	if (zfcp_erp_adapter_strategy_open_fsf_xport(act) == ZFCP_ERP_FAILED)
754 		return ZFCP_ERP_FAILED;
755 
756 	if (mempool_resize(act->adapter->pool.status_read_data,
757 			   act->adapter->stat_read_buf_num, GFP_KERNEL))
758 		return ZFCP_ERP_FAILED;
759 
760 	if (mempool_resize(act->adapter->pool.status_read_req,
761 			   act->adapter->stat_read_buf_num, GFP_KERNEL))
762 		return ZFCP_ERP_FAILED;
763 
764 	atomic_set(&act->adapter->stat_miss, act->adapter->stat_read_buf_num);
765 	if (zfcp_status_read_refill(act->adapter))
766 		return ZFCP_ERP_FAILED;
767 
768 	return ZFCP_ERP_SUCCEEDED;
769 }
770 
771 static void zfcp_erp_adapter_strategy_close(struct zfcp_erp_action *act)
772 {
773 	struct zfcp_adapter *adapter = act->adapter;
774 
775 	/* close queues to ensure that buffers are not accessed by adapter */
776 	zfcp_qdio_close(adapter->qdio);
777 	zfcp_fsf_req_dismiss_all(adapter);
778 	adapter->fsf_req_seq_no = 0;
779 	zfcp_fc_wka_ports_force_offline(adapter->gs);
780 	/* all ports and LUNs are closed */
781 	zfcp_erp_clear_adapter_status(adapter, ZFCP_STATUS_COMMON_OPEN);
782 
783 	atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK |
784 			  ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);
785 }
786 
787 static int zfcp_erp_adapter_strategy_open(struct zfcp_erp_action *act)
788 {
789 	struct zfcp_adapter *adapter = act->adapter;
790 
791 	if (zfcp_erp_adapter_strategy_open_qdio(act)) {
792 		atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK |
793 				  ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,
794 				  &adapter->status);
795 		return ZFCP_ERP_FAILED;
796 	}
797 
798 	if (zfcp_erp_adapter_strategy_open_fsf(act)) {
799 		zfcp_erp_adapter_strategy_close(act);
800 		return ZFCP_ERP_FAILED;
801 	}
802 
803 	atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &adapter->status);
804 
805 	return ZFCP_ERP_SUCCEEDED;
806 }
807 
808 static int zfcp_erp_adapter_strategy(struct zfcp_erp_action *act)
809 {
810 	struct zfcp_adapter *adapter = act->adapter;
811 
812 	if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_OPEN) {
813 		zfcp_erp_adapter_strategy_close(act);
814 		if (act->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
815 			return ZFCP_ERP_EXIT;
816 	}
817 
818 	if (zfcp_erp_adapter_strategy_open(act)) {
819 		ssleep(8);
820 		return ZFCP_ERP_FAILED;
821 	}
822 
823 	return ZFCP_ERP_SUCCEEDED;
824 }
825 
826 static int zfcp_erp_port_forced_strategy_close(struct zfcp_erp_action *act)
827 {
828 	int retval;
829 
830 	retval = zfcp_fsf_close_physical_port(act);
831 	if (retval == -ENOMEM)
832 		return ZFCP_ERP_NOMEM;
833 	act->step = ZFCP_ERP_STEP_PHYS_PORT_CLOSING;
834 	if (retval)
835 		return ZFCP_ERP_FAILED;
836 
837 	return ZFCP_ERP_CONTINUES;
838 }
839 
840 static void zfcp_erp_port_strategy_clearstati(struct zfcp_port *port)
841 {
842 	atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, &port->status);
843 }
844 
845 static int zfcp_erp_port_forced_strategy(struct zfcp_erp_action *erp_action)
846 {
847 	struct zfcp_port *port = erp_action->port;
848 	int status = atomic_read(&port->status);
849 
850 	switch (erp_action->step) {
851 	case ZFCP_ERP_STEP_UNINITIALIZED:
852 		zfcp_erp_port_strategy_clearstati(port);
853 		if ((status & ZFCP_STATUS_PORT_PHYS_OPEN) &&
854 		    (status & ZFCP_STATUS_COMMON_OPEN))
855 			return zfcp_erp_port_forced_strategy_close(erp_action);
856 		else
857 			return ZFCP_ERP_FAILED;
858 
859 	case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
860 		if (!(status & ZFCP_STATUS_PORT_PHYS_OPEN))
861 			return ZFCP_ERP_SUCCEEDED;
862 	}
863 	return ZFCP_ERP_FAILED;
864 }
865 
866 static int zfcp_erp_port_strategy_close(struct zfcp_erp_action *erp_action)
867 {
868 	int retval;
869 
870 	retval = zfcp_fsf_close_port(erp_action);
871 	if (retval == -ENOMEM)
872 		return ZFCP_ERP_NOMEM;
873 	erp_action->step = ZFCP_ERP_STEP_PORT_CLOSING;
874 	if (retval)
875 		return ZFCP_ERP_FAILED;
876 	return ZFCP_ERP_CONTINUES;
877 }
878 
879 static int zfcp_erp_port_strategy_open_port(struct zfcp_erp_action *erp_action)
880 {
881 	int retval;
882 
883 	retval = zfcp_fsf_open_port(erp_action);
884 	if (retval == -ENOMEM)
885 		return ZFCP_ERP_NOMEM;
886 	erp_action->step = ZFCP_ERP_STEP_PORT_OPENING;
887 	if (retval)
888 		return ZFCP_ERP_FAILED;
889 	return ZFCP_ERP_CONTINUES;
890 }
891 
892 static int zfcp_erp_open_ptp_port(struct zfcp_erp_action *act)
893 {
894 	struct zfcp_adapter *adapter = act->adapter;
895 	struct zfcp_port *port = act->port;
896 
897 	if (port->wwpn != adapter->peer_wwpn) {
898 		zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ERP_FAILED);
899 		return ZFCP_ERP_FAILED;
900 	}
901 	port->d_id = adapter->peer_d_id;
902 	return zfcp_erp_port_strategy_open_port(act);
903 }
904 
905 static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
906 {
907 	struct zfcp_adapter *adapter = act->adapter;
908 	struct zfcp_port *port = act->port;
909 	int p_status = atomic_read(&port->status);
910 
911 	switch (act->step) {
912 	case ZFCP_ERP_STEP_UNINITIALIZED:
913 	case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
914 	case ZFCP_ERP_STEP_PORT_CLOSING:
915 		if (fc_host_port_type(adapter->scsi_host) == FC_PORTTYPE_PTP)
916 			return zfcp_erp_open_ptp_port(act);
917 		if (!port->d_id) {
918 			zfcp_fc_trigger_did_lookup(port);
919 			return ZFCP_ERP_EXIT;
920 		}
921 		return zfcp_erp_port_strategy_open_port(act);
922 
923 	case ZFCP_ERP_STEP_PORT_OPENING:
924 		/* D_ID might have changed during open */
925 		if (p_status & ZFCP_STATUS_COMMON_OPEN) {
926 			if (!port->d_id) {
927 				zfcp_fc_trigger_did_lookup(port);
928 				return ZFCP_ERP_EXIT;
929 			}
930 			return ZFCP_ERP_SUCCEEDED;
931 		}
932 		if (port->d_id && !(p_status & ZFCP_STATUS_COMMON_NOESC)) {
933 			port->d_id = 0;
934 			return ZFCP_ERP_FAILED;
935 		}
936 		/* fall through otherwise */
937 	}
938 	return ZFCP_ERP_FAILED;
939 }
940 
941 static int zfcp_erp_port_strategy(struct zfcp_erp_action *erp_action)
942 {
943 	struct zfcp_port *port = erp_action->port;
944 	int p_status = atomic_read(&port->status);
945 
946 	if ((p_status & ZFCP_STATUS_COMMON_NOESC) &&
947 	    !(p_status & ZFCP_STATUS_COMMON_OPEN))
948 		goto close_init_done;
949 
950 	switch (erp_action->step) {
951 	case ZFCP_ERP_STEP_UNINITIALIZED:
952 		zfcp_erp_port_strategy_clearstati(port);
953 		if (p_status & ZFCP_STATUS_COMMON_OPEN)
954 			return zfcp_erp_port_strategy_close(erp_action);
955 		break;
956 
957 	case ZFCP_ERP_STEP_PORT_CLOSING:
958 		if (p_status & ZFCP_STATUS_COMMON_OPEN)
959 			return ZFCP_ERP_FAILED;
960 		break;
961 	}
962 
963 close_init_done:
964 	if (erp_action->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
965 		return ZFCP_ERP_EXIT;
966 
967 	return zfcp_erp_port_strategy_open_common(erp_action);
968 }
969 
970 static void zfcp_erp_lun_strategy_clearstati(struct scsi_device *sdev)
971 {
972 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
973 
974 	atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
975 			  ZFCP_STATUS_LUN_SHARED | ZFCP_STATUS_LUN_READONLY,
976 			  &zfcp_sdev->status);
977 }
978 
979 static int zfcp_erp_lun_strategy_close(struct zfcp_erp_action *erp_action)
980 {
981 	int retval = zfcp_fsf_close_lun(erp_action);
982 	if (retval == -ENOMEM)
983 		return ZFCP_ERP_NOMEM;
984 	erp_action->step = ZFCP_ERP_STEP_LUN_CLOSING;
985 	if (retval)
986 		return ZFCP_ERP_FAILED;
987 	return ZFCP_ERP_CONTINUES;
988 }
989 
990 static int zfcp_erp_lun_strategy_open(struct zfcp_erp_action *erp_action)
991 {
992 	int retval = zfcp_fsf_open_lun(erp_action);
993 	if (retval == -ENOMEM)
994 		return ZFCP_ERP_NOMEM;
995 	erp_action->step = ZFCP_ERP_STEP_LUN_OPENING;
996 	if (retval)
997 		return  ZFCP_ERP_FAILED;
998 	return ZFCP_ERP_CONTINUES;
999 }
1000 
1001 static int zfcp_erp_lun_strategy(struct zfcp_erp_action *erp_action)
1002 {
1003 	struct scsi_device *sdev = erp_action->sdev;
1004 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1005 
1006 	switch (erp_action->step) {
1007 	case ZFCP_ERP_STEP_UNINITIALIZED:
1008 		zfcp_erp_lun_strategy_clearstati(sdev);
1009 		if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1010 			return zfcp_erp_lun_strategy_close(erp_action);
1011 		/* already closed, fall through */
1012 	case ZFCP_ERP_STEP_LUN_CLOSING:
1013 		if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1014 			return ZFCP_ERP_FAILED;
1015 		if (erp_action->status & ZFCP_STATUS_ERP_CLOSE_ONLY)
1016 			return ZFCP_ERP_EXIT;
1017 		return zfcp_erp_lun_strategy_open(erp_action);
1018 
1019 	case ZFCP_ERP_STEP_LUN_OPENING:
1020 		if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
1021 			return ZFCP_ERP_SUCCEEDED;
1022 	}
1023 	return ZFCP_ERP_FAILED;
1024 }
1025 
1026 static int zfcp_erp_strategy_check_lun(struct scsi_device *sdev, int result)
1027 {
1028 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1029 
1030 	switch (result) {
1031 	case ZFCP_ERP_SUCCEEDED :
1032 		atomic_set(&zfcp_sdev->erp_counter, 0);
1033 		zfcp_erp_lun_unblock(sdev);
1034 		break;
1035 	case ZFCP_ERP_FAILED :
1036 		atomic_inc(&zfcp_sdev->erp_counter);
1037 		if (atomic_read(&zfcp_sdev->erp_counter) > ZFCP_MAX_ERPS) {
1038 			dev_err(&zfcp_sdev->port->adapter->ccw_device->dev,
1039 				"ERP failed for LUN 0x%016Lx on "
1040 				"port 0x%016Lx\n",
1041 				(unsigned long long)zfcp_scsi_dev_lun(sdev),
1042 				(unsigned long long)zfcp_sdev->port->wwpn);
1043 			zfcp_erp_set_lun_status(sdev,
1044 						ZFCP_STATUS_COMMON_ERP_FAILED);
1045 		}
1046 		break;
1047 	}
1048 
1049 	if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1050 		zfcp_erp_lun_block(sdev, 0);
1051 		result = ZFCP_ERP_EXIT;
1052 	}
1053 	return result;
1054 }
1055 
1056 static int zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1057 {
1058 	switch (result) {
1059 	case ZFCP_ERP_SUCCEEDED :
1060 		atomic_set(&port->erp_counter, 0);
1061 		zfcp_erp_port_unblock(port);
1062 		break;
1063 
1064 	case ZFCP_ERP_FAILED :
1065 		if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_NOESC) {
1066 			zfcp_erp_port_block(port, 0);
1067 			result = ZFCP_ERP_EXIT;
1068 		}
1069 		atomic_inc(&port->erp_counter);
1070 		if (atomic_read(&port->erp_counter) > ZFCP_MAX_ERPS) {
1071 			dev_err(&port->adapter->ccw_device->dev,
1072 				"ERP failed for remote port 0x%016Lx\n",
1073 				(unsigned long long)port->wwpn);
1074 			zfcp_erp_set_port_status(port,
1075 					 ZFCP_STATUS_COMMON_ERP_FAILED);
1076 		}
1077 		break;
1078 	}
1079 
1080 	if (atomic_read(&port->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1081 		zfcp_erp_port_block(port, 0);
1082 		result = ZFCP_ERP_EXIT;
1083 	}
1084 	return result;
1085 }
1086 
1087 static int zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter,
1088 					   int result)
1089 {
1090 	switch (result) {
1091 	case ZFCP_ERP_SUCCEEDED :
1092 		atomic_set(&adapter->erp_counter, 0);
1093 		zfcp_erp_adapter_unblock(adapter);
1094 		break;
1095 
1096 	case ZFCP_ERP_FAILED :
1097 		atomic_inc(&adapter->erp_counter);
1098 		if (atomic_read(&adapter->erp_counter) > ZFCP_MAX_ERPS) {
1099 			dev_err(&adapter->ccw_device->dev,
1100 				"ERP cannot recover an error "
1101 				"on the FCP device\n");
1102 			zfcp_erp_set_adapter_status(adapter,
1103 					    ZFCP_STATUS_COMMON_ERP_FAILED);
1104 		}
1105 		break;
1106 	}
1107 
1108 	if (atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_ERP_FAILED) {
1109 		zfcp_erp_adapter_block(adapter, 0);
1110 		result = ZFCP_ERP_EXIT;
1111 	}
1112 	return result;
1113 }
1114 
1115 static int zfcp_erp_strategy_check_target(struct zfcp_erp_action *erp_action,
1116 					  int result)
1117 {
1118 	struct zfcp_adapter *adapter = erp_action->adapter;
1119 	struct zfcp_port *port = erp_action->port;
1120 	struct scsi_device *sdev = erp_action->sdev;
1121 
1122 	switch (erp_action->action) {
1123 
1124 	case ZFCP_ERP_ACTION_REOPEN_LUN:
1125 		result = zfcp_erp_strategy_check_lun(sdev, result);
1126 		break;
1127 
1128 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1129 	case ZFCP_ERP_ACTION_REOPEN_PORT:
1130 		result = zfcp_erp_strategy_check_port(port, result);
1131 		break;
1132 
1133 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1134 		result = zfcp_erp_strategy_check_adapter(adapter, result);
1135 		break;
1136 	}
1137 	return result;
1138 }
1139 
1140 static int zfcp_erp_strat_change_det(atomic_t *target_status, u32 erp_status)
1141 {
1142 	int status = atomic_read(target_status);
1143 
1144 	if ((status & ZFCP_STATUS_COMMON_RUNNING) &&
1145 	    (erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1146 		return 1; /* take it online */
1147 
1148 	if (!(status & ZFCP_STATUS_COMMON_RUNNING) &&
1149 	    !(erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1150 		return 1; /* take it offline */
1151 
1152 	return 0;
1153 }
1154 
1155 static int zfcp_erp_strategy_statechange(struct zfcp_erp_action *act, int ret)
1156 {
1157 	int action = act->action;
1158 	struct zfcp_adapter *adapter = act->adapter;
1159 	struct zfcp_port *port = act->port;
1160 	struct scsi_device *sdev = act->sdev;
1161 	struct zfcp_scsi_dev *zfcp_sdev;
1162 	u32 erp_status = act->status;
1163 
1164 	switch (action) {
1165 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1166 		if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) {
1167 			_zfcp_erp_adapter_reopen(adapter,
1168 						 ZFCP_STATUS_COMMON_ERP_FAILED,
1169 						 "ersscg1", NULL);
1170 			return ZFCP_ERP_EXIT;
1171 		}
1172 		break;
1173 
1174 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1175 	case ZFCP_ERP_ACTION_REOPEN_PORT:
1176 		if (zfcp_erp_strat_change_det(&port->status, erp_status)) {
1177 			_zfcp_erp_port_reopen(port,
1178 					      ZFCP_STATUS_COMMON_ERP_FAILED,
1179 					      "ersscg2", NULL);
1180 			return ZFCP_ERP_EXIT;
1181 		}
1182 		break;
1183 
1184 	case ZFCP_ERP_ACTION_REOPEN_LUN:
1185 		zfcp_sdev = sdev_to_zfcp(sdev);
1186 		if (zfcp_erp_strat_change_det(&zfcp_sdev->status, erp_status)) {
1187 			_zfcp_erp_lun_reopen(sdev,
1188 					     ZFCP_STATUS_COMMON_ERP_FAILED,
1189 					     "ersscg3", NULL, 0);
1190 			return ZFCP_ERP_EXIT;
1191 		}
1192 		break;
1193 	}
1194 	return ret;
1195 }
1196 
1197 static void zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
1198 {
1199 	struct zfcp_adapter *adapter = erp_action->adapter;
1200 	struct zfcp_scsi_dev *zfcp_sdev;
1201 
1202 	adapter->erp_total_count--;
1203 	if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
1204 		adapter->erp_low_mem_count--;
1205 		erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
1206 	}
1207 
1208 	list_del(&erp_action->list);
1209 	zfcp_dbf_rec_action("eractd1", erp_action);
1210 
1211 	switch (erp_action->action) {
1212 	case ZFCP_ERP_ACTION_REOPEN_LUN:
1213 		zfcp_sdev = sdev_to_zfcp(erp_action->sdev);
1214 		atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
1215 				  &zfcp_sdev->status);
1216 		break;
1217 
1218 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1219 	case ZFCP_ERP_ACTION_REOPEN_PORT:
1220 		atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
1221 				  &erp_action->port->status);
1222 		break;
1223 
1224 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1225 		atomic_clear_mask(ZFCP_STATUS_COMMON_ERP_INUSE,
1226 				  &erp_action->adapter->status);
1227 		break;
1228 	}
1229 }
1230 
1231 static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
1232 {
1233 	struct zfcp_adapter *adapter = act->adapter;
1234 	struct zfcp_port *port = act->port;
1235 	struct scsi_device *sdev = act->sdev;
1236 
1237 	switch (act->action) {
1238 	case ZFCP_ERP_ACTION_REOPEN_LUN:
1239 		if (!(act->status & ZFCP_STATUS_ERP_NO_REF))
1240 			scsi_device_put(sdev);
1241 		break;
1242 
1243 	case ZFCP_ERP_ACTION_REOPEN_PORT:
1244 		if (result == ZFCP_ERP_SUCCEEDED)
1245 			zfcp_scsi_schedule_rport_register(port);
1246 		/* fall through */
1247 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1248 		put_device(&port->dev);
1249 		break;
1250 
1251 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1252 		if (result == ZFCP_ERP_SUCCEEDED) {
1253 			register_service_level(&adapter->service_level);
1254 			queue_work(adapter->work_queue, &adapter->scan_work);
1255 		} else
1256 			unregister_service_level(&adapter->service_level);
1257 		kref_put(&adapter->ref, zfcp_adapter_release);
1258 		break;
1259 	}
1260 }
1261 
1262 static int zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action)
1263 {
1264 	switch (erp_action->action) {
1265 	case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
1266 		return zfcp_erp_adapter_strategy(erp_action);
1267 	case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
1268 		return zfcp_erp_port_forced_strategy(erp_action);
1269 	case ZFCP_ERP_ACTION_REOPEN_PORT:
1270 		return zfcp_erp_port_strategy(erp_action);
1271 	case ZFCP_ERP_ACTION_REOPEN_LUN:
1272 		return zfcp_erp_lun_strategy(erp_action);
1273 	}
1274 	return ZFCP_ERP_FAILED;
1275 }
1276 
1277 static int zfcp_erp_strategy(struct zfcp_erp_action *erp_action)
1278 {
1279 	int retval;
1280 	unsigned long flags;
1281 	struct zfcp_adapter *adapter = erp_action->adapter;
1282 
1283 	kref_get(&adapter->ref);
1284 
1285 	write_lock_irqsave(&adapter->erp_lock, flags);
1286 	zfcp_erp_strategy_check_fsfreq(erp_action);
1287 
1288 	if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED) {
1289 		zfcp_erp_action_dequeue(erp_action);
1290 		retval = ZFCP_ERP_DISMISSED;
1291 		goto unlock;
1292 	}
1293 
1294 	if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
1295 		retval = ZFCP_ERP_FAILED;
1296 		goto check_target;
1297 	}
1298 
1299 	zfcp_erp_action_to_running(erp_action);
1300 
1301 	/* no lock to allow for blocking operations */
1302 	write_unlock_irqrestore(&adapter->erp_lock, flags);
1303 	retval = zfcp_erp_strategy_do_action(erp_action);
1304 	write_lock_irqsave(&adapter->erp_lock, flags);
1305 
1306 	if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED)
1307 		retval = ZFCP_ERP_CONTINUES;
1308 
1309 	switch (retval) {
1310 	case ZFCP_ERP_NOMEM:
1311 		if (!(erp_action->status & ZFCP_STATUS_ERP_LOWMEM)) {
1312 			++adapter->erp_low_mem_count;
1313 			erp_action->status |= ZFCP_STATUS_ERP_LOWMEM;
1314 		}
1315 		if (adapter->erp_total_count == adapter->erp_low_mem_count)
1316 			_zfcp_erp_adapter_reopen(adapter, 0, "erstgy1", NULL);
1317 		else {
1318 			zfcp_erp_strategy_memwait(erp_action);
1319 			retval = ZFCP_ERP_CONTINUES;
1320 		}
1321 		goto unlock;
1322 
1323 	case ZFCP_ERP_CONTINUES:
1324 		if (erp_action->status & ZFCP_STATUS_ERP_LOWMEM) {
1325 			--adapter->erp_low_mem_count;
1326 			erp_action->status &= ~ZFCP_STATUS_ERP_LOWMEM;
1327 		}
1328 		goto unlock;
1329 	}
1330 
1331 check_target:
1332 	retval = zfcp_erp_strategy_check_target(erp_action, retval);
1333 	zfcp_erp_action_dequeue(erp_action);
1334 	retval = zfcp_erp_strategy_statechange(erp_action, retval);
1335 	if (retval == ZFCP_ERP_EXIT)
1336 		goto unlock;
1337 	if (retval == ZFCP_ERP_SUCCEEDED)
1338 		zfcp_erp_strategy_followup_success(erp_action);
1339 	if (retval == ZFCP_ERP_FAILED)
1340 		zfcp_erp_strategy_followup_failed(erp_action);
1341 
1342  unlock:
1343 	write_unlock_irqrestore(&adapter->erp_lock, flags);
1344 
1345 	if (retval != ZFCP_ERP_CONTINUES)
1346 		zfcp_erp_action_cleanup(erp_action, retval);
1347 
1348 	kref_put(&adapter->ref, zfcp_adapter_release);
1349 	return retval;
1350 }
1351 
1352 static int zfcp_erp_thread(void *data)
1353 {
1354 	struct zfcp_adapter *adapter = (struct zfcp_adapter *) data;
1355 	struct list_head *next;
1356 	struct zfcp_erp_action *act;
1357 	unsigned long flags;
1358 
1359 	for (;;) {
1360 		zfcp_dbf_rec_thread_lock("erthrd1", adapter->dbf);
1361 		wait_event_interruptible(adapter->erp_ready_wq,
1362 			   !list_empty(&adapter->erp_ready_head) ||
1363 			   kthread_should_stop());
1364 		zfcp_dbf_rec_thread_lock("erthrd2", adapter->dbf);
1365 
1366 		if (kthread_should_stop())
1367 			break;
1368 
1369 		write_lock_irqsave(&adapter->erp_lock, flags);
1370 		next = adapter->erp_ready_head.next;
1371 		write_unlock_irqrestore(&adapter->erp_lock, flags);
1372 
1373 		if (next != &adapter->erp_ready_head) {
1374 			act = list_entry(next, struct zfcp_erp_action, list);
1375 
1376 			/* there is more to come after dismission, no notify */
1377 			if (zfcp_erp_strategy(act) != ZFCP_ERP_DISMISSED)
1378 				zfcp_erp_wakeup(adapter);
1379 		}
1380 	}
1381 
1382 	return 0;
1383 }
1384 
1385 /**
1386  * zfcp_erp_thread_setup - Start ERP thread for adapter
1387  * @adapter: Adapter to start the ERP thread for
1388  *
1389  * Returns 0 on success or error code from kernel_thread()
1390  */
1391 int zfcp_erp_thread_setup(struct zfcp_adapter *adapter)
1392 {
1393 	struct task_struct *thread;
1394 
1395 	thread = kthread_run(zfcp_erp_thread, adapter, "zfcperp%s",
1396 			     dev_name(&adapter->ccw_device->dev));
1397 	if (IS_ERR(thread)) {
1398 		dev_err(&adapter->ccw_device->dev,
1399 			"Creating an ERP thread for the FCP device failed.\n");
1400 		return PTR_ERR(thread);
1401 	}
1402 
1403 	adapter->erp_thread = thread;
1404 	return 0;
1405 }
1406 
1407 /**
1408  * zfcp_erp_thread_kill - Stop ERP thread.
1409  * @adapter: Adapter where the ERP thread should be stopped.
1410  *
1411  * The caller of this routine ensures that the specified adapter has
1412  * been shut down and that this operation has been completed. Thus,
1413  * there are no pending erp_actions which would need to be handled
1414  * here.
1415  */
1416 void zfcp_erp_thread_kill(struct zfcp_adapter *adapter)
1417 {
1418 	kthread_stop(adapter->erp_thread);
1419 	adapter->erp_thread = NULL;
1420 	WARN_ON(!list_empty(&adapter->erp_ready_head));
1421 	WARN_ON(!list_empty(&adapter->erp_running_head));
1422 }
1423 
1424 /**
1425  * zfcp_erp_wait - wait for completion of error recovery on an adapter
1426  * @adapter: adapter for which to wait for completion of its error recovery
1427  */
1428 void zfcp_erp_wait(struct zfcp_adapter *adapter)
1429 {
1430 	wait_event(adapter->erp_done_wqh,
1431 		   !(atomic_read(&adapter->status) &
1432 			ZFCP_STATUS_ADAPTER_ERP_PENDING));
1433 }
1434 
1435 /**
1436  * zfcp_erp_set_adapter_status - set adapter status bits
1437  * @adapter: adapter to change the status
1438  * @mask: status bits to change
1439  *
1440  * Changes in common status bits are propagated to attached ports and LUNs.
1441  */
1442 void zfcp_erp_set_adapter_status(struct zfcp_adapter *adapter, u32 mask)
1443 {
1444 	struct zfcp_port *port;
1445 	struct scsi_device *sdev;
1446 	unsigned long flags;
1447 	u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1448 
1449 	atomic_set_mask(mask, &adapter->status);
1450 
1451 	if (!common_mask)
1452 		return;
1453 
1454 	read_lock_irqsave(&adapter->port_list_lock, flags);
1455 	list_for_each_entry(port, &adapter->port_list, list)
1456 		atomic_set_mask(common_mask, &port->status);
1457 	read_unlock_irqrestore(&adapter->port_list_lock, flags);
1458 
1459 	shost_for_each_device(sdev, adapter->scsi_host)
1460 		atomic_set_mask(common_mask, &sdev_to_zfcp(sdev)->status);
1461 }
1462 
1463 /**
1464  * zfcp_erp_clear_adapter_status - clear adapter status bits
1465  * @adapter: adapter to change the status
1466  * @mask: status bits to change
1467  *
1468  * Changes in common status bits are propagated to attached ports and LUNs.
1469  */
1470 void zfcp_erp_clear_adapter_status(struct zfcp_adapter *adapter, u32 mask)
1471 {
1472 	struct zfcp_port *port;
1473 	struct scsi_device *sdev;
1474 	unsigned long flags;
1475 	u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1476 	u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
1477 
1478 	atomic_clear_mask(mask, &adapter->status);
1479 
1480 	if (!common_mask)
1481 		return;
1482 
1483 	if (clear_counter)
1484 		atomic_set(&adapter->erp_counter, 0);
1485 
1486 	read_lock_irqsave(&adapter->port_list_lock, flags);
1487 	list_for_each_entry(port, &adapter->port_list, list) {
1488 		atomic_clear_mask(common_mask, &port->status);
1489 		if (clear_counter)
1490 			atomic_set(&port->erp_counter, 0);
1491 	}
1492 	read_unlock_irqrestore(&adapter->port_list_lock, flags);
1493 
1494 	shost_for_each_device(sdev, adapter->scsi_host) {
1495 		atomic_clear_mask(common_mask, &sdev_to_zfcp(sdev)->status);
1496 		if (clear_counter)
1497 			atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1498 	}
1499 }
1500 
1501 /**
1502  * zfcp_erp_set_port_status - set port status bits
1503  * @port: port to change the status
1504  * @mask: status bits to change
1505  *
1506  * Changes in common status bits are propagated to attached LUNs.
1507  */
1508 void zfcp_erp_set_port_status(struct zfcp_port *port, u32 mask)
1509 {
1510 	struct scsi_device *sdev;
1511 	u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1512 
1513 	atomic_set_mask(mask, &port->status);
1514 
1515 	if (!common_mask)
1516 		return;
1517 
1518 	shost_for_each_device(sdev, port->adapter->scsi_host)
1519 		if (sdev_to_zfcp(sdev)->port == port)
1520 			atomic_set_mask(common_mask,
1521 					&sdev_to_zfcp(sdev)->status);
1522 }
1523 
1524 /**
1525  * zfcp_erp_clear_port_status - clear port status bits
1526  * @port: adapter to change the status
1527  * @mask: status bits to change
1528  *
1529  * Changes in common status bits are propagated to attached LUNs.
1530  */
1531 void zfcp_erp_clear_port_status(struct zfcp_port *port, u32 mask)
1532 {
1533 	struct scsi_device *sdev;
1534 	u32 common_mask = mask & ZFCP_COMMON_FLAGS;
1535 	u32 clear_counter = mask & ZFCP_STATUS_COMMON_ERP_FAILED;
1536 
1537 	atomic_clear_mask(mask, &port->status);
1538 
1539 	if (!common_mask)
1540 		return;
1541 
1542 	if (clear_counter)
1543 		atomic_set(&port->erp_counter, 0);
1544 
1545 	shost_for_each_device(sdev, port->adapter->scsi_host)
1546 		if (sdev_to_zfcp(sdev)->port == port) {
1547 			atomic_clear_mask(common_mask,
1548 					  &sdev_to_zfcp(sdev)->status);
1549 			if (clear_counter)
1550 				atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1551 		}
1552 }
1553 
1554 /**
1555  * zfcp_erp_set_lun_status - set lun status bits
1556  * @sdev: SCSI device / lun to set the status bits
1557  * @mask: status bits to change
1558  */
1559 void zfcp_erp_set_lun_status(struct scsi_device *sdev, u32 mask)
1560 {
1561 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1562 
1563 	atomic_set_mask(mask, &zfcp_sdev->status);
1564 }
1565 
1566 /**
1567  * zfcp_erp_clear_lun_status - clear lun status bits
1568  * @sdev: SCSi device / lun to clear the status bits
1569  * @mask: status bits to change
1570  */
1571 void zfcp_erp_clear_lun_status(struct scsi_device *sdev, u32 mask)
1572 {
1573 	struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev);
1574 
1575 	atomic_clear_mask(mask, &zfcp_sdev->status);
1576 
1577 	if (mask & ZFCP_STATUS_COMMON_ERP_FAILED)
1578 		atomic_set(&zfcp_sdev->erp_counter, 0);
1579 }
1580 
1581