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