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