9 #define KMSG_COMPONENT "zfcp"
10 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
16 #define ZFCP_MAX_ERPS 3
78 list_move(&act->list, &act->adapter->erp_ready_head);
88 zfcp_erp_action_ready(act);
91 static void zfcp_erp_action_dismiss_lun(
struct scsi_device *sdev)
96 zfcp_erp_action_dismiss(&zfcp_sdev->
erp_action);
99 static void zfcp_erp_action_dismiss_port(
struct zfcp_port *
port)
107 if (sdev_to_zfcp(sdev)->port == port)
108 zfcp_erp_action_dismiss_lun(sdev);
116 zfcp_erp_action_dismiss(&adapter->erp_action);
120 zfcp_erp_action_dismiss_port(port);
130 int l_status, p_status, a_status;
135 zfcp_sdev = sdev_to_zfcp(sdev);
153 if (p_status & ZFCP_STATUS_COMMON_ERP_INUSE)
156 if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) ||
157 a_status & ZFCP_STATUS_COMMON_ERP_FAILED)
161 if (!(a_status & ZFCP_STATUS_COMMON_UNBLOCKED))
166 if (a_status & ZFCP_STATUS_COMMON_ERP_INUSE)
168 if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) &&
169 !(a_status & ZFCP_STATUS_COMMON_OPEN))
186 zfcp_sdev = sdev_to_zfcp(sdev);
195 erp_action->
sdev = sdev;
197 ZFCP_STATUS_COMMON_RUNNING))
205 zfcp_erp_action_dismiss_port(port);
215 kref_get(&adapter->
ref);
216 zfcp_erp_action_dismiss_adapter(adapter);
221 ZFCP_STATUS_COMMON_RUNNING))
230 erp_action->
action = need;
231 erp_action->
status = act_status;
236 static int zfcp_erp_action_enqueue(
int want,
struct zfcp_adapter *adapter,
239 char *
id,
u32 act_status)
247 need = zfcp_erp_required_act(want, adapter, port, sdev);
251 act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev);
264 static int _zfcp_erp_adapter_reopen(
struct zfcp_adapter *adapter,
265 int clear_mask,
char *
id)
267 zfcp_erp_adapter_block(adapter, clear_mask);
273 ZFCP_STATUS_COMMON_ERP_FAILED);
290 zfcp_erp_adapter_block(adapter, clear);
296 ZFCP_STATUS_COMMON_ERP_FAILED);
328 static void zfcp_erp_port_block(
struct zfcp_port *port,
int clear)
331 ZFCP_STATUS_COMMON_UNBLOCKED | clear);
334 static void _zfcp_erp_port_forced_reopen(
struct zfcp_port *port,
int clear,
337 zfcp_erp_port_block(port, clear);
359 _zfcp_erp_port_forced_reopen(port, clear,
id);
363 static int _zfcp_erp_port_reopen(
struct zfcp_port *port,
int clear,
char *
id)
365 zfcp_erp_port_block(port, clear);
393 retval = _zfcp_erp_port_reopen(port, clear,
id);
399 static void zfcp_erp_lun_block(
struct scsi_device *sdev,
int clear_mask)
402 ZFCP_STATUS_COMMON_UNBLOCKED | clear_mask);
405 static void _zfcp_erp_lun_reopen(
struct scsi_device *sdev,
int clear,
char *
id,
411 zfcp_erp_lun_block(sdev, clear);
417 zfcp_sdev->
port, sdev,
id, act_status);
436 _zfcp_erp_lun_reopen(sdev, clear,
id, 0);
471 _zfcp_erp_lun_reopen(sdev, clear,
id, ZFCP_STATUS_ERP_NO_REF);
482 static void zfcp_erp_adapter_unblock(
struct zfcp_adapter *adapter)
484 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &adapter->
status))
489 static void zfcp_erp_port_unblock(
struct zfcp_port *port)
491 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &port->
status))
496 static void zfcp_erp_lun_unblock(
struct scsi_device *sdev)
500 if (status_change_set(ZFCP_STATUS_COMMON_UNBLOCKED, &zfcp_sdev->
status))
505 static void zfcp_erp_action_to_running(
struct zfcp_erp_action *erp_action)
507 list_move(&erp_action->
list, &erp_action->
adapter->erp_running_head);
511 static void zfcp_erp_strategy_check_fsfreq(
struct zfcp_erp_action *act)
519 spin_lock(&adapter->
req_list->lock);
534 spin_unlock(&adapter->
req_list->lock);
549 erp_action->
status |= set_mask;
550 zfcp_erp_action_ready(erp_action);
565 static void zfcp_erp_memwait_handler(
unsigned long data)
570 static void zfcp_erp_strategy_memwait(
struct zfcp_erp_action *erp_action)
573 erp_action->
timer.function = zfcp_erp_memwait_handler;
574 erp_action->
timer.data = (
unsigned long) erp_action;
579 static void _zfcp_erp_port_reopen_all(
struct zfcp_adapter *adapter,
586 _zfcp_erp_port_reopen(port, clear,
id);
590 static
void _zfcp_erp_lun_reopen_all(
struct zfcp_port *port,
int clear,
596 if (sdev_to_zfcp(sdev)->port == port)
597 _zfcp_erp_lun_reopen(sdev, clear,
id, 0);
602 switch (act->action) {
604 _zfcp_erp_adapter_reopen(act->adapter, 0,
"ersff_1");
607 _zfcp_erp_port_forced_reopen(act->port, 0,
"ersff_2");
610 _zfcp_erp_port_reopen(act->port, 0,
"ersff_3");
613 _zfcp_erp_lun_reopen(act->sdev, 0,
"ersff_4", 0);
618 static void zfcp_erp_strategy_followup_success(
struct zfcp_erp_action *act)
622 _zfcp_erp_port_reopen_all(act->
adapter, 0,
"ersfs_1");
625 _zfcp_erp_port_reopen(act->
port, 0,
"ersfs_2");
628 _zfcp_erp_lun_reopen_all(act->
port, 0,
"ersfs_3");
633 static void zfcp_erp_wakeup(
struct zfcp_adapter *adapter)
647 static void zfcp_erp_enqueue_ptp_port(
struct zfcp_adapter *adapter)
654 _zfcp_erp_port_reopen(port, 0,
"ereptp1");
657 static int zfcp_erp_adapter_strat_fsf_xconf(
struct zfcp_erp_action *erp_action)
665 for (retries = 7;
retries; retries--) {
669 zfcp_erp_action_to_running(erp_action);
697 zfcp_erp_enqueue_ptp_port(adapter);
702 static int zfcp_erp_adapter_strategy_open_fsf_xport(
struct zfcp_erp_action *act)
708 zfcp_erp_action_to_running(act);
727 static int zfcp_erp_adapter_strategy_open_fsf(
struct zfcp_erp_action *act)
750 static void zfcp_erp_adapter_strategy_close(
struct zfcp_erp_action *act)
777 if (zfcp_erp_adapter_strategy_open_fsf(act)) {
778 zfcp_erp_adapter_strategy_close(act);
792 zfcp_erp_adapter_strategy_close(act);
797 if (zfcp_erp_adapter_strategy_open(act)) {
805 static int zfcp_erp_port_forced_strategy_close(
struct zfcp_erp_action *act)
819 static void zfcp_erp_port_strategy_clearstati(
struct zfcp_port *port)
824 static int zfcp_erp_port_forced_strategy(
struct zfcp_erp_action *erp_action)
829 switch (erp_action->
step) {
831 zfcp_erp_port_strategy_clearstati(port);
833 (status & ZFCP_STATUS_COMMON_OPEN))
834 return zfcp_erp_port_forced_strategy_close(erp_action);
839 if (!(status & ZFCP_STATUS_PORT_PHYS_OPEN))
845 static int zfcp_erp_port_strategy_close(
struct zfcp_erp_action *erp_action)
858 static int zfcp_erp_port_strategy_open_port(
struct zfcp_erp_action *erp_action)
881 return zfcp_erp_port_strategy_open_port(act);
884 static int zfcp_erp_port_strategy_open_common(
struct zfcp_erp_action *act)
895 return zfcp_erp_open_ptp_port(act);
900 return zfcp_erp_port_strategy_open_port(act);
904 if (p_status & ZFCP_STATUS_COMMON_OPEN) {
911 if (port->
d_id && !(p_status & ZFCP_STATUS_COMMON_NOESC)) {
925 if ((p_status & ZFCP_STATUS_COMMON_NOESC) &&
926 !(p_status & ZFCP_STATUS_COMMON_OPEN))
927 goto close_init_done;
929 switch (erp_action->
step) {
931 zfcp_erp_port_strategy_clearstati(port);
932 if (p_status & ZFCP_STATUS_COMMON_OPEN)
933 return zfcp_erp_port_strategy_close(erp_action);
937 if (p_status & ZFCP_STATUS_COMMON_OPEN)
946 return zfcp_erp_port_strategy_open_common(erp_action);
949 static void zfcp_erp_lun_strategy_clearstati(
struct scsi_device *sdev)
958 static int zfcp_erp_lun_strategy_close(
struct zfcp_erp_action *erp_action)
969 static int zfcp_erp_lun_strategy_open(
struct zfcp_erp_action *erp_action)
985 switch (erp_action->
step) {
987 zfcp_erp_lun_strategy_clearstati(sdev);
989 return zfcp_erp_lun_strategy_close(erp_action);
996 return zfcp_erp_lun_strategy_open(erp_action);
1012 zfcp_erp_lun_unblock(sdev);
1017 dev_err(&zfcp_sdev->
port->adapter->ccw_device->dev,
1018 "ERP failed for LUN 0x%016Lx on "
1020 (
unsigned long long)zfcp_scsi_dev_lun(sdev),
1021 (
unsigned long long)zfcp_sdev->
port->wwpn);
1023 ZFCP_STATUS_COMMON_ERP_FAILED);
1029 zfcp_erp_lun_block(sdev, 0);
1035 static int zfcp_erp_strategy_check_port(
struct zfcp_port *port,
int result)
1040 zfcp_erp_port_unblock(port);
1045 zfcp_erp_port_block(port, 0);
1051 "ERP failed for remote port 0x%016Lx\n",
1052 (
unsigned long long)port->
wwpn);
1054 ZFCP_STATUS_COMMON_ERP_FAILED);
1060 zfcp_erp_port_block(port, 0);
1066 static int zfcp_erp_strategy_check_adapter(
struct zfcp_adapter *adapter,
1072 zfcp_erp_adapter_unblock(adapter);
1079 "ERP cannot recover an error "
1080 "on the FCP device\n");
1082 ZFCP_STATUS_COMMON_ERP_FAILED);
1088 zfcp_erp_adapter_block(adapter, 0);
1094 static int zfcp_erp_strategy_check_target(
struct zfcp_erp_action *erp_action,
1101 switch (erp_action->
action) {
1104 result = zfcp_erp_strategy_check_lun(sdev, result);
1109 result = zfcp_erp_strategy_check_port(port, result);
1113 result = zfcp_erp_strategy_check_adapter(adapter, result);
1123 if ((status & ZFCP_STATUS_COMMON_RUNNING) &&
1127 if (!(status & ZFCP_STATUS_COMMON_RUNNING) &&
1128 !(erp_status & ZFCP_STATUS_ERP_CLOSE_ONLY))
1134 static int zfcp_erp_strategy_statechange(
struct zfcp_erp_action *act,
int ret)
1145 if (zfcp_erp_strat_change_det(&adapter->
status, erp_status)) {
1146 _zfcp_erp_adapter_reopen(adapter,
1147 ZFCP_STATUS_COMMON_ERP_FAILED,
1155 if (zfcp_erp_strat_change_det(&port->
status, erp_status)) {
1156 _zfcp_erp_port_reopen(port,
1157 ZFCP_STATUS_COMMON_ERP_FAILED,
1164 zfcp_sdev = sdev_to_zfcp(sdev);
1165 if (zfcp_erp_strat_change_det(&zfcp_sdev->
status, erp_status)) {
1166 _zfcp_erp_lun_reopen(sdev,
1167 ZFCP_STATUS_COMMON_ERP_FAILED,
1176 static void zfcp_erp_action_dequeue(
struct zfcp_erp_action *erp_action)
1190 switch (erp_action->
action) {
1192 zfcp_sdev = sdev_to_zfcp(erp_action->
sdev);
1200 &erp_action->
port->status);
1205 &erp_action->
adapter->status);
1210 static void zfcp_erp_action_cleanup(
struct zfcp_erp_action *act,
int result)
1218 if (!(act->
status & ZFCP_STATUS_ERP_NO_REF))
1243 static int zfcp_erp_strategy_do_action(
struct zfcp_erp_action *erp_action)
1245 switch (erp_action->
action) {
1247 return zfcp_erp_adapter_strategy(erp_action);
1249 return zfcp_erp_port_forced_strategy(erp_action);
1251 return zfcp_erp_port_strategy(erp_action);
1253 return zfcp_erp_lun_strategy(erp_action);
1261 unsigned long flags;
1264 kref_get(&adapter->
ref);
1267 zfcp_erp_strategy_check_fsfreq(erp_action);
1270 zfcp_erp_action_dequeue(erp_action);
1280 zfcp_erp_action_to_running(erp_action);
1284 retval = zfcp_erp_strategy_do_action(erp_action);
1297 _zfcp_erp_adapter_reopen(adapter, 0,
"erstgy1");
1299 zfcp_erp_strategy_memwait(erp_action);
1313 retval = zfcp_erp_strategy_check_target(erp_action, retval);
1314 zfcp_erp_action_dequeue(erp_action);
1315 retval = zfcp_erp_strategy_statechange(erp_action, retval);
1319 zfcp_erp_strategy_followup_success(erp_action);
1321 zfcp_erp_strategy_followup_failed(erp_action);
1327 zfcp_erp_action_cleanup(erp_action, retval);
1333 static int zfcp_erp_thread(
void *data)
1338 unsigned long flags;
1357 zfcp_erp_wakeup(adapter);
1374 thread =
kthread_run(zfcp_erp_thread, adapter,
"zfcperp%s",
1376 if (IS_ERR(thread)) {
1378 "Creating an ERP thread for the FCP device failed.\n");
1379 return PTR_ERR(thread);
1425 unsigned long flags;
1453 unsigned long flags;
1476 atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1498 if (sdev_to_zfcp(sdev)->port == port)
1500 &sdev_to_zfcp(sdev)->status);
1525 if (sdev_to_zfcp(sdev)->port == port) {
1527 &sdev_to_zfcp(sdev)->status);
1529 atomic_set(&sdev_to_zfcp(sdev)->erp_counter, 0);
1556 if (mask & ZFCP_STATUS_COMMON_ERP_FAILED)