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