diff options
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 5 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_ccw.c | 14 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_cfdc.c | 8 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_dbf.c | 70 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_dbf.h | 25 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 97 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_ext.h | 18 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fc.c | 18 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 85 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_qdio.c | 6 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 6 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_sysfs.c | 9 |
12 files changed, 180 insertions, 181 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 044fb22718d2..352ca0d4ca25 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -311,8 +311,7 @@ int zfcp_status_read_refill(struct zfcp_adapter *adapter) | |||
311 | if (zfcp_fsf_status_read(adapter->qdio)) { | 311 | if (zfcp_fsf_status_read(adapter->qdio)) { |
312 | if (atomic_read(&adapter->stat_miss) >= | 312 | if (atomic_read(&adapter->stat_miss) >= |
313 | adapter->stat_read_buf_num) { | 313 | adapter->stat_read_buf_num) { |
314 | zfcp_erp_adapter_reopen(adapter, 0, "axsref1", | 314 | zfcp_erp_adapter_reopen(adapter, 0, "axsref1"); |
315 | NULL); | ||
316 | return 1; | 315 | return 1; |
317 | } | 316 | } |
318 | break; | 317 | break; |
@@ -459,7 +458,7 @@ void zfcp_adapter_unregister(struct zfcp_adapter *adapter) | |||
459 | sysfs_remove_group(&cdev->dev.kobj, &zfcp_sysfs_adapter_attrs); | 458 | sysfs_remove_group(&cdev->dev.kobj, &zfcp_sysfs_adapter_attrs); |
460 | 459 | ||
461 | zfcp_erp_thread_kill(adapter); | 460 | zfcp_erp_thread_kill(adapter); |
462 | zfcp_dbf_adapter_unregister(adapter->dbf); | 461 | zfcp_dbf_adapter_unregister(adapter); |
463 | zfcp_qdio_destroy(adapter->qdio); | 462 | zfcp_qdio_destroy(adapter->qdio); |
464 | 463 | ||
465 | zfcp_ccw_adapter_put(adapter); /* final put to release */ | 464 | zfcp_ccw_adapter_put(adapter); /* final put to release */ |
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c index 0833c2b51e39..4f7852dd30c7 100644 --- a/drivers/s390/scsi/zfcp_ccw.c +++ b/drivers/s390/scsi/zfcp_ccw.c | |||
@@ -48,7 +48,7 @@ static int zfcp_ccw_activate(struct ccw_device *cdev) | |||
48 | 48 | ||
49 | zfcp_erp_set_adapter_status(adapter, ZFCP_STATUS_COMMON_RUNNING); | 49 | zfcp_erp_set_adapter_status(adapter, ZFCP_STATUS_COMMON_RUNNING); |
50 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, | 50 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, |
51 | "ccresu2", NULL); | 51 | "ccresu2"); |
52 | zfcp_erp_wait(adapter); | 52 | zfcp_erp_wait(adapter); |
53 | flush_work(&adapter->scan_work); | 53 | flush_work(&adapter->scan_work); |
54 | 54 | ||
@@ -182,7 +182,7 @@ static int zfcp_ccw_set_offline(struct ccw_device *cdev) | |||
182 | if (!adapter) | 182 | if (!adapter) |
183 | return 0; | 183 | return 0; |
184 | 184 | ||
185 | zfcp_erp_adapter_shutdown(adapter, 0, "ccsoff1", NULL); | 185 | zfcp_erp_adapter_shutdown(adapter, 0, "ccsoff1"); |
186 | zfcp_erp_wait(adapter); | 186 | zfcp_erp_wait(adapter); |
187 | 187 | ||
188 | zfcp_ccw_adapter_put(adapter); | 188 | zfcp_ccw_adapter_put(adapter); |
@@ -207,24 +207,24 @@ static int zfcp_ccw_notify(struct ccw_device *cdev, int event) | |||
207 | switch (event) { | 207 | switch (event) { |
208 | case CIO_GONE: | 208 | case CIO_GONE: |
209 | dev_warn(&cdev->dev, "The FCP device has been detached\n"); | 209 | dev_warn(&cdev->dev, "The FCP device has been detached\n"); |
210 | zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti1", NULL); | 210 | zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti1"); |
211 | break; | 211 | break; |
212 | case CIO_NO_PATH: | 212 | case CIO_NO_PATH: |
213 | dev_warn(&cdev->dev, | 213 | dev_warn(&cdev->dev, |
214 | "The CHPID for the FCP device is offline\n"); | 214 | "The CHPID for the FCP device is offline\n"); |
215 | zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti2", NULL); | 215 | zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti2"); |
216 | break; | 216 | break; |
217 | case CIO_OPER: | 217 | case CIO_OPER: |
218 | dev_info(&cdev->dev, "The FCP device is operational again\n"); | 218 | dev_info(&cdev->dev, "The FCP device is operational again\n"); |
219 | zfcp_erp_set_adapter_status(adapter, | 219 | zfcp_erp_set_adapter_status(adapter, |
220 | ZFCP_STATUS_COMMON_RUNNING); | 220 | ZFCP_STATUS_COMMON_RUNNING); |
221 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, | 221 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, |
222 | "ccnoti4", NULL); | 222 | "ccnoti4"); |
223 | break; | 223 | break; |
224 | case CIO_BOXED: | 224 | case CIO_BOXED: |
225 | dev_warn(&cdev->dev, "The FCP device did not respond within " | 225 | dev_warn(&cdev->dev, "The FCP device did not respond within " |
226 | "the specified time\n"); | 226 | "the specified time\n"); |
227 | zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti5", NULL); | 227 | zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti5"); |
228 | break; | 228 | break; |
229 | } | 229 | } |
230 | 230 | ||
@@ -243,7 +243,7 @@ static void zfcp_ccw_shutdown(struct ccw_device *cdev) | |||
243 | if (!adapter) | 243 | if (!adapter) |
244 | return; | 244 | return; |
245 | 245 | ||
246 | zfcp_erp_adapter_shutdown(adapter, 0, "ccshut1", NULL); | 246 | zfcp_erp_adapter_shutdown(adapter, 0, "ccshut1"); |
247 | zfcp_erp_wait(adapter); | 247 | zfcp_erp_wait(adapter); |
248 | zfcp_erp_thread_kill(adapter); | 248 | zfcp_erp_thread_kill(adapter); |
249 | 249 | ||
diff --git a/drivers/s390/scsi/zfcp_cfdc.c b/drivers/s390/scsi/zfcp_cfdc.c index d692e229ecba..46342fee394d 100644 --- a/drivers/s390/scsi/zfcp_cfdc.c +++ b/drivers/s390/scsi/zfcp_cfdc.c | |||
@@ -288,7 +288,7 @@ void zfcp_cfdc_adapter_access_changed(struct zfcp_adapter *adapter) | |||
288 | (status & ZFCP_STATUS_COMMON_ACCESS_BOXED)) | 288 | (status & ZFCP_STATUS_COMMON_ACCESS_BOXED)) |
289 | zfcp_erp_port_reopen(port, | 289 | zfcp_erp_port_reopen(port, |
290 | ZFCP_STATUS_COMMON_ERP_FAILED, | 290 | ZFCP_STATUS_COMMON_ERP_FAILED, |
291 | "cfaac_1", NULL); | 291 | "cfaac_1"); |
292 | } | 292 | } |
293 | read_unlock_irqrestore(&adapter->port_list_lock, flags); | 293 | read_unlock_irqrestore(&adapter->port_list_lock, flags); |
294 | 294 | ||
@@ -299,7 +299,7 @@ void zfcp_cfdc_adapter_access_changed(struct zfcp_adapter *adapter) | |||
299 | (status & ZFCP_STATUS_COMMON_ACCESS_BOXED)) | 299 | (status & ZFCP_STATUS_COMMON_ACCESS_BOXED)) |
300 | zfcp_erp_lun_reopen(sdev, | 300 | zfcp_erp_lun_reopen(sdev, |
301 | ZFCP_STATUS_COMMON_ERP_FAILED, | 301 | ZFCP_STATUS_COMMON_ERP_FAILED, |
302 | "cfaac_2", NULL); | 302 | "cfaac_2"); |
303 | } | 303 | } |
304 | } | 304 | } |
305 | 305 | ||
@@ -426,7 +426,7 @@ int zfcp_cfdc_open_lun_eval(struct scsi_device *sdev, | |||
426 | zfcp_scsi_dev_lun(sdev), | 426 | zfcp_scsi_dev_lun(sdev), |
427 | (unsigned long long)zfcp_sdev->port->wwpn); | 427 | (unsigned long long)zfcp_sdev->port->wwpn); |
428 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ERP_FAILED); | 428 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ERP_FAILED); |
429 | zfcp_erp_lun_shutdown(sdev, 0, "fsouh_6", NULL); | 429 | zfcp_erp_lun_shutdown(sdev, 0, "fsouh_6"); |
430 | return -EACCES; | 430 | return -EACCES; |
431 | } | 431 | } |
432 | 432 | ||
@@ -437,7 +437,7 @@ int zfcp_cfdc_open_lun_eval(struct scsi_device *sdev, | |||
437 | zfcp_scsi_dev_lun(sdev), | 437 | zfcp_scsi_dev_lun(sdev), |
438 | (unsigned long long)zfcp_sdev->port->wwpn); | 438 | (unsigned long long)zfcp_sdev->port->wwpn); |
439 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ERP_FAILED); | 439 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ERP_FAILED); |
440 | zfcp_erp_lun_shutdown(sdev, 0, "fsosh_8", NULL); | 440 | zfcp_erp_lun_shutdown(sdev, 0, "fsosh_8"); |
441 | return -EACCES; | 441 | return -EACCES; |
442 | } | 442 | } |
443 | 443 | ||
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c index f9bd094c6e63..96d1462e0bf5 100644 --- a/drivers/s390/scsi/zfcp_dbf.c +++ b/drivers/s390/scsi/zfcp_dbf.c | |||
@@ -377,26 +377,37 @@ void zfcp_dbf_scsi(char *tag, struct scsi_cmnd *sc, struct zfcp_fsf_req *fsf) | |||
377 | } | 377 | } |
378 | } | 378 | } |
379 | 379 | ||
380 | debug_event(adapter->dbf->scsi, 1, rec, sizeof(*rec)); | 380 | debug_event(dbf->scsi, 1, rec, sizeof(*rec)); |
381 | spin_unlock_irqrestore(&dbf->scsi_lock, flags); | 381 | spin_unlock_irqrestore(&dbf->scsi_lock, flags); |
382 | } | 382 | } |
383 | 383 | ||
384 | static debug_info_t *zfcp_dbf_reg(const char *name, int level, | 384 | static debug_info_t *zfcp_dbf_reg(const char *name, int size, int rec_size) |
385 | struct debug_view *view, int size) | ||
386 | { | 385 | { |
387 | struct debug_info *d; | 386 | struct debug_info *d; |
388 | 387 | ||
389 | d = debug_register(name, dbfsize, level, size); | 388 | d = debug_register(name, size, 1, rec_size); |
390 | if (!d) | 389 | if (!d) |
391 | return NULL; | 390 | return NULL; |
392 | 391 | ||
393 | debug_register_view(d, &debug_hex_ascii_view); | 392 | debug_register_view(d, &debug_hex_ascii_view); |
394 | debug_register_view(d, view); | 393 | debug_set_level(d, 3); |
395 | debug_set_level(d, level); | ||
396 | 394 | ||
397 | return d; | 395 | return d; |
398 | } | 396 | } |
399 | 397 | ||
398 | static void zfcp_dbf_unregister(struct zfcp_dbf *dbf) | ||
399 | { | ||
400 | if (!dbf) | ||
401 | return; | ||
402 | |||
403 | debug_unregister(dbf->scsi); | ||
404 | debug_unregister(dbf->san); | ||
405 | debug_unregister(dbf->hba); | ||
406 | debug_unregister(dbf->pay); | ||
407 | debug_unregister(dbf->rec); | ||
408 | kfree(dbf); | ||
409 | } | ||
410 | |||
400 | /** | 411 | /** |
401 | * zfcp_adapter_debug_register - registers debug feature for an adapter | 412 | * zfcp_adapter_debug_register - registers debug feature for an adapter |
402 | * @adapter: pointer to adapter for which debug features should be registered | 413 | * @adapter: pointer to adapter for which debug features should be registered |
@@ -404,15 +415,13 @@ static debug_info_t *zfcp_dbf_reg(const char *name, int level, | |||
404 | */ | 415 | */ |
405 | int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter) | 416 | int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter) |
406 | { | 417 | { |
407 | char dbf_name[DEBUG_MAX_NAME_LEN]; | 418 | char name[DEBUG_MAX_NAME_LEN]; |
408 | struct zfcp_dbf *dbf; | 419 | struct zfcp_dbf *dbf; |
409 | 420 | ||
410 | dbf = kzalloc(sizeof(struct zfcp_dbf), GFP_KERNEL); | 421 | dbf = kzalloc(sizeof(struct zfcp_dbf), GFP_KERNEL); |
411 | if (!dbf) | 422 | if (!dbf) |
412 | return -ENOMEM; | 423 | return -ENOMEM; |
413 | 424 | ||
414 | dbf->adapter = adapter; | ||
415 | |||
416 | spin_lock_init(&dbf->pay_lock); | 425 | spin_lock_init(&dbf->pay_lock); |
417 | spin_lock_init(&dbf->hba_lock); | 426 | spin_lock_init(&dbf->hba_lock); |
418 | spin_lock_init(&dbf->san_lock); | 427 | spin_lock_init(&dbf->san_lock); |
@@ -420,59 +429,52 @@ int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter) | |||
420 | spin_lock_init(&dbf->rec_lock); | 429 | spin_lock_init(&dbf->rec_lock); |
421 | 430 | ||
422 | /* debug feature area which records recovery activity */ | 431 | /* debug feature area which records recovery activity */ |
423 | sprintf(dbf_name, "zfcp_%s_rec", dev_name(&adapter->ccw_device->dev)); | 432 | sprintf(name, "zfcp_%s_rec", dev_name(&adapter->ccw_device->dev)); |
424 | dbf->rec = zfcp_dbf_reg(dbf_name, 3, NULL, sizeof(struct zfcp_dbf_rec)); | 433 | dbf->rec = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_rec)); |
425 | if (!dbf->rec) | 434 | if (!dbf->rec) |
426 | goto err_out; | 435 | goto err_out; |
427 | 436 | ||
428 | /* debug feature area which records HBA (FSF and QDIO) conditions */ | 437 | /* debug feature area which records HBA (FSF and QDIO) conditions */ |
429 | sprintf(dbf_name, "zfcp_%s_hba", dev_name(&adapter->ccw_device->dev)); | 438 | sprintf(name, "zfcp_%s_hba", dev_name(&adapter->ccw_device->dev)); |
430 | dbf->hba = zfcp_dbf_reg(dbf_name, 3, NULL, sizeof(struct zfcp_dbf_hba)); | 439 | dbf->hba = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_hba)); |
431 | if (!dbf->hba) | 440 | if (!dbf->hba) |
432 | goto err_out; | 441 | goto err_out; |
433 | 442 | ||
434 | /* debug feature area which records payload info */ | 443 | /* debug feature area which records payload info */ |
435 | sprintf(dbf_name, "zfcp_%s_pay", dev_name(&adapter->ccw_device->dev)); | 444 | sprintf(name, "zfcp_%s_pay", dev_name(&adapter->ccw_device->dev)); |
436 | dbf->pay = zfcp_dbf_reg(dbf_name, 3, NULL, | 445 | dbf->pay = zfcp_dbf_reg(name, dbfsize * 2, sizeof(struct zfcp_dbf_pay)); |
437 | sizeof(struct zfcp_dbf_pay)); | ||
438 | if (!dbf->pay) | 446 | if (!dbf->pay) |
439 | goto err_out; | 447 | goto err_out; |
440 | 448 | ||
441 | /* debug feature area which records SAN command failures and recovery */ | 449 | /* debug feature area which records SAN command failures and recovery */ |
442 | sprintf(dbf_name, "zfcp_%s_san", dev_name(&adapter->ccw_device->dev)); | 450 | sprintf(name, "zfcp_%s_san", dev_name(&adapter->ccw_device->dev)); |
443 | dbf->san = zfcp_dbf_reg(dbf_name, 3, NULL, sizeof(struct zfcp_dbf_san)); | 451 | dbf->san = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_san)); |
444 | if (!dbf->san) | 452 | if (!dbf->san) |
445 | goto err_out; | 453 | goto err_out; |
446 | 454 | ||
447 | /* debug feature area which records SCSI command failures and recovery */ | 455 | /* debug feature area which records SCSI command failures and recovery */ |
448 | sprintf(dbf_name, "zfcp_%s_scsi", dev_name(&adapter->ccw_device->dev)); | 456 | sprintf(name, "zfcp_%s_scsi", dev_name(&adapter->ccw_device->dev)); |
449 | dbf->scsi = zfcp_dbf_reg(dbf_name, 3, NULL, | 457 | dbf->scsi = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_scsi)); |
450 | sizeof(struct zfcp_dbf_scsi)); | ||
451 | if (!dbf->scsi) | 458 | if (!dbf->scsi) |
452 | goto err_out; | 459 | goto err_out; |
453 | 460 | ||
454 | adapter->dbf = dbf; | 461 | adapter->dbf = dbf; |
455 | return 0; | ||
456 | 462 | ||
463 | return 0; | ||
457 | err_out: | 464 | err_out: |
458 | zfcp_dbf_adapter_unregister(dbf); | 465 | zfcp_dbf_unregister(dbf); |
459 | return -ENOMEM; | 466 | return -ENOMEM; |
460 | } | 467 | } |
461 | 468 | ||
462 | /** | 469 | /** |
463 | * zfcp_adapter_debug_unregister - unregisters debug feature for an adapter | 470 | * zfcp_adapter_debug_unregister - unregisters debug feature for an adapter |
464 | * @dbf: pointer to dbf for which debug features should be unregistered | 471 | * @adapter: pointer to adapter for which debug features should be unregistered |
465 | */ | 472 | */ |
466 | void zfcp_dbf_adapter_unregister(struct zfcp_dbf *dbf) | 473 | void zfcp_dbf_adapter_unregister(struct zfcp_adapter *adapter) |
467 | { | 474 | { |
468 | if (!dbf) | 475 | struct zfcp_dbf *dbf = adapter->dbf; |
469 | return; | 476 | |
470 | debug_unregister(dbf->scsi); | 477 | adapter->dbf = NULL; |
471 | debug_unregister(dbf->san); | 478 | zfcp_dbf_unregister(dbf); |
472 | debug_unregister(dbf->hba); | ||
473 | debug_unregister(dbf->pay); | ||
474 | debug_unregister(dbf->rec); | ||
475 | dbf->adapter->dbf = NULL; | ||
476 | kfree(dbf); | ||
477 | } | 479 | } |
478 | 480 | ||
diff --git a/drivers/s390/scsi/zfcp_dbf.h b/drivers/s390/scsi/zfcp_dbf.h index 2cee8197dd02..714f087eb7a9 100644 --- a/drivers/s390/scsi/zfcp_dbf.h +++ b/drivers/s390/scsi/zfcp_dbf.h | |||
@@ -14,8 +14,6 @@ | |||
14 | #include "zfcp_def.h" | 14 | #include "zfcp_def.h" |
15 | 15 | ||
16 | #define ZFCP_DBF_TAG_LEN 7 | 16 | #define ZFCP_DBF_TAG_LEN 7 |
17 | #define ZFCP_DBF_TAG_SIZE 4 | ||
18 | #define ZFCP_DBF_ID_SIZE 7 | ||
19 | 17 | ||
20 | #define ZFCP_DBF_INVALID_LUN 0xFFFFFFFFFFFFFFFFull | 18 | #define ZFCP_DBF_INVALID_LUN 0xFFFFFFFFFFFFFFFFull |
21 | 19 | ||
@@ -233,13 +231,31 @@ struct zfcp_dbf_scsi { | |||
233 | * @data: unformatted data | 231 | * @data: unformatted data |
234 | */ | 232 | */ |
235 | struct zfcp_dbf_pay { | 233 | struct zfcp_dbf_pay { |
234 | u8 counter; | ||
236 | char area[ZFCP_DBF_TAG_LEN]; | 235 | char area[ZFCP_DBF_TAG_LEN]; |
237 | char counter; | ||
238 | u64 fsf_req_id; | 236 | u64 fsf_req_id; |
239 | #define ZFCP_DBF_PAY_MAX_REC 0x100 | 237 | #define ZFCP_DBF_PAY_MAX_REC 0x100 |
240 | char data[ZFCP_DBF_PAY_MAX_REC]; | 238 | char data[ZFCP_DBF_PAY_MAX_REC]; |
241 | } __packed; | 239 | } __packed; |
242 | 240 | ||
241 | /** | ||
242 | * struct zfcp_dbf - main dbf trace structure | ||
243 | * @pay: reference to payload trace area | ||
244 | * @rec: reference to recovery trace area | ||
245 | * @hba: reference to hba trace area | ||
246 | * @san: reference to san trace area | ||
247 | * @scsi: reference to scsi trace area | ||
248 | * @pay_lock: lock protecting payload trace buffer | ||
249 | * @rec_lock: lock protecting recovery trace buffer | ||
250 | * @hba_lock: lock protecting hba trace buffer | ||
251 | * @san_lock: lock protecting san trace buffer | ||
252 | * @scsi_lock: lock protecting scsi trace buffer | ||
253 | * @pay_buf: pre-allocated buffer for payload | ||
254 | * @rec_buf: pre-allocated buffer for recovery | ||
255 | * @hba_buf: pre-allocated buffer for hba | ||
256 | * @san_buf: pre-allocated buffer for san | ||
257 | * @scsi_buf: pre-allocated buffer for scsi | ||
258 | */ | ||
243 | struct zfcp_dbf { | 259 | struct zfcp_dbf { |
244 | debug_info_t *pay; | 260 | debug_info_t *pay; |
245 | debug_info_t *rec; | 261 | debug_info_t *rec; |
@@ -251,12 +267,11 @@ struct zfcp_dbf { | |||
251 | spinlock_t hba_lock; | 267 | spinlock_t hba_lock; |
252 | spinlock_t san_lock; | 268 | spinlock_t san_lock; |
253 | spinlock_t scsi_lock; | 269 | spinlock_t scsi_lock; |
270 | struct zfcp_dbf_pay pay_buf; | ||
254 | struct zfcp_dbf_rec rec_buf; | 271 | struct zfcp_dbf_rec rec_buf; |
255 | struct zfcp_dbf_hba hba_buf; | 272 | struct zfcp_dbf_hba hba_buf; |
256 | struct zfcp_dbf_san san_buf; | 273 | struct zfcp_dbf_san san_buf; |
257 | struct zfcp_dbf_scsi scsi_buf; | 274 | struct zfcp_dbf_scsi scsi_buf; |
258 | struct zfcp_dbf_pay pay_buf; | ||
259 | struct zfcp_adapter *adapter; | ||
260 | }; | 275 | }; |
261 | 276 | ||
262 | static inline | 277 | static inline |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 62b1b4a03ee3..066f9ea67502 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -236,7 +236,7 @@ static struct zfcp_erp_action *zfcp_erp_setup_act(int need, u32 act_status, | |||
236 | static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter, | 236 | static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter, |
237 | struct zfcp_port *port, | 237 | struct zfcp_port *port, |
238 | struct scsi_device *sdev, | 238 | struct scsi_device *sdev, |
239 | char *id, void *ref, u32 act_status) | 239 | char *id, u32 act_status) |
240 | { | 240 | { |
241 | int retval = 1, need; | 241 | int retval = 1, need; |
242 | struct zfcp_erp_action *act; | 242 | struct zfcp_erp_action *act; |
@@ -262,7 +262,7 @@ static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter, | |||
262 | } | 262 | } |
263 | 263 | ||
264 | static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, | 264 | static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, |
265 | int clear_mask, char *id, void *ref) | 265 | int clear_mask, char *id) |
266 | { | 266 | { |
267 | zfcp_erp_adapter_block(adapter, clear_mask); | 267 | zfcp_erp_adapter_block(adapter, clear_mask); |
268 | zfcp_scsi_schedule_rports_block(adapter); | 268 | zfcp_scsi_schedule_rports_block(adapter); |
@@ -274,7 +274,7 @@ static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, | |||
274 | return -EIO; | 274 | return -EIO; |
275 | } | 275 | } |
276 | return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, | 276 | return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, |
277 | adapter, NULL, NULL, id, ref, 0); | 277 | adapter, NULL, NULL, id, 0); |
278 | } | 278 | } |
279 | 279 | ||
280 | /** | 280 | /** |
@@ -282,10 +282,8 @@ static int _zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, | |||
282 | * @adapter: Adapter to reopen. | 282 | * @adapter: Adapter to reopen. |
283 | * @clear: Status flags to clear. | 283 | * @clear: Status flags to clear. |
284 | * @id: Id for debug trace event. | 284 | * @id: Id for debug trace event. |
285 | * @ref: Reference for debug trace event. | ||
286 | */ | 285 | */ |
287 | void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, | 286 | void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, char *id) |
288 | char *id, void *ref) | ||
289 | { | 287 | { |
290 | unsigned long flags; | 288 | unsigned long flags; |
291 | 289 | ||
@@ -298,7 +296,7 @@ void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, | |||
298 | ZFCP_STATUS_COMMON_ERP_FAILED); | 296 | ZFCP_STATUS_COMMON_ERP_FAILED); |
299 | else | 297 | else |
300 | zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter, | 298 | zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_ADAPTER, adapter, |
301 | NULL, NULL, id, ref, 0); | 299 | NULL, NULL, id, 0); |
302 | write_unlock_irqrestore(&adapter->erp_lock, flags); | 300 | write_unlock_irqrestore(&adapter->erp_lock, flags); |
303 | } | 301 | } |
304 | 302 | ||
@@ -307,13 +305,12 @@ void zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear, | |||
307 | * @adapter: Adapter to shut down. | 305 | * @adapter: Adapter to shut down. |
308 | * @clear: Status flags to clear. | 306 | * @clear: Status flags to clear. |
309 | * @id: Id for debug trace event. | 307 | * @id: Id for debug trace event. |
310 | * @ref: Reference for debug trace event. | ||
311 | */ | 308 | */ |
312 | void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear, | 309 | void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear, |
313 | char *id, void *ref) | 310 | char *id) |
314 | { | 311 | { |
315 | int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; | 312 | int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; |
316 | zfcp_erp_adapter_reopen(adapter, clear | flags, id, ref); | 313 | zfcp_erp_adapter_reopen(adapter, clear | flags, id); |
317 | } | 314 | } |
318 | 315 | ||
319 | /** | 316 | /** |
@@ -321,13 +318,11 @@ void zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear, | |||
321 | * @port: Port to shut down. | 318 | * @port: Port to shut down. |
322 | * @clear: Status flags to clear. | 319 | * @clear: Status flags to clear. |
323 | * @id: Id for debug trace event. | 320 | * @id: Id for debug trace event. |
324 | * @ref: Reference for debug trace event. | ||
325 | */ | 321 | */ |
326 | void zfcp_erp_port_shutdown(struct zfcp_port *port, int clear, char *id, | 322 | void zfcp_erp_port_shutdown(struct zfcp_port *port, int clear, char *id) |
327 | void *ref) | ||
328 | { | 323 | { |
329 | int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; | 324 | int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; |
330 | zfcp_erp_port_reopen(port, clear | flags, id, ref); | 325 | zfcp_erp_port_reopen(port, clear | flags, id); |
331 | } | 326 | } |
332 | 327 | ||
333 | static void zfcp_erp_port_block(struct zfcp_port *port, int clear) | 328 | static void zfcp_erp_port_block(struct zfcp_port *port, int clear) |
@@ -336,8 +331,8 @@ static void zfcp_erp_port_block(struct zfcp_port *port, int clear) | |||
336 | ZFCP_STATUS_COMMON_UNBLOCKED | clear); | 331 | ZFCP_STATUS_COMMON_UNBLOCKED | clear); |
337 | } | 332 | } |
338 | 333 | ||
339 | static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, | 334 | static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear, |
340 | int clear, char *id, void *ref) | 335 | char *id) |
341 | { | 336 | { |
342 | zfcp_erp_port_block(port, clear); | 337 | zfcp_erp_port_block(port, clear); |
343 | zfcp_scsi_schedule_rport_block(port); | 338 | zfcp_scsi_schedule_rport_block(port); |
@@ -346,28 +341,26 @@ static void _zfcp_erp_port_forced_reopen(struct zfcp_port *port, | |||
346 | return; | 341 | return; |
347 | 342 | ||
348 | zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED, | 343 | zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT_FORCED, |
349 | port->adapter, port, NULL, id, ref, 0); | 344 | port->adapter, port, NULL, id, 0); |
350 | } | 345 | } |
351 | 346 | ||
352 | /** | 347 | /** |
353 | * zfcp_erp_port_forced_reopen - Forced close of port and open again | 348 | * zfcp_erp_port_forced_reopen - Forced close of port and open again |
354 | * @port: Port to force close and to reopen. | 349 | * @port: Port to force close and to reopen. |
350 | * @clear: Status flags to clear. | ||
355 | * @id: Id for debug trace event. | 351 | * @id: Id for debug trace event. |
356 | * @ref: Reference for debug trace event. | ||
357 | */ | 352 | */ |
358 | void zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear, char *id, | 353 | void zfcp_erp_port_forced_reopen(struct zfcp_port *port, int clear, char *id) |
359 | void *ref) | ||
360 | { | 354 | { |
361 | unsigned long flags; | 355 | unsigned long flags; |
362 | struct zfcp_adapter *adapter = port->adapter; | 356 | struct zfcp_adapter *adapter = port->adapter; |
363 | 357 | ||
364 | write_lock_irqsave(&adapter->erp_lock, flags); | 358 | write_lock_irqsave(&adapter->erp_lock, flags); |
365 | _zfcp_erp_port_forced_reopen(port, clear, id, ref); | 359 | _zfcp_erp_port_forced_reopen(port, clear, id); |
366 | write_unlock_irqrestore(&adapter->erp_lock, flags); | 360 | write_unlock_irqrestore(&adapter->erp_lock, flags); |
367 | } | 361 | } |
368 | 362 | ||
369 | static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id, | 363 | static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id) |
370 | void *ref) | ||
371 | { | 364 | { |
372 | zfcp_erp_port_block(port, clear); | 365 | zfcp_erp_port_block(port, clear); |
373 | zfcp_scsi_schedule_rport_block(port); | 366 | zfcp_scsi_schedule_rport_block(port); |
@@ -379,24 +372,25 @@ static int _zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id, | |||
379 | } | 372 | } |
380 | 373 | ||
381 | return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT, | 374 | return zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_PORT, |
382 | port->adapter, port, NULL, id, ref, 0); | 375 | port->adapter, port, NULL, id, 0); |
383 | } | 376 | } |
384 | 377 | ||
385 | /** | 378 | /** |
386 | * zfcp_erp_port_reopen - trigger remote port recovery | 379 | * zfcp_erp_port_reopen - trigger remote port recovery |
387 | * @port: port to recover | 380 | * @port: port to recover |
388 | * @clear_mask: flags in port status to be cleared | 381 | * @clear_mask: flags in port status to be cleared |
382 | * @id: Id for debug trace event. | ||
389 | * | 383 | * |
390 | * Returns 0 if recovery has been triggered, < 0 if not. | 384 | * Returns 0 if recovery has been triggered, < 0 if not. |
391 | */ | 385 | */ |
392 | int zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id, void *ref) | 386 | int zfcp_erp_port_reopen(struct zfcp_port *port, int clear, char *id) |
393 | { | 387 | { |
394 | int retval; | 388 | int retval; |
395 | unsigned long flags; | 389 | unsigned long flags; |
396 | struct zfcp_adapter *adapter = port->adapter; | 390 | struct zfcp_adapter *adapter = port->adapter; |
397 | 391 | ||
398 | write_lock_irqsave(&adapter->erp_lock, flags); | 392 | write_lock_irqsave(&adapter->erp_lock, flags); |
399 | retval = _zfcp_erp_port_reopen(port, clear, id, ref); | 393 | retval = _zfcp_erp_port_reopen(port, clear, id); |
400 | write_unlock_irqrestore(&adapter->erp_lock, flags); | 394 | write_unlock_irqrestore(&adapter->erp_lock, flags); |
401 | 395 | ||
402 | return retval; | 396 | return retval; |
@@ -409,7 +403,7 @@ static void zfcp_erp_lun_block(struct scsi_device *sdev, int clear_mask) | |||
409 | } | 403 | } |
410 | 404 | ||
411 | static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id, | 405 | static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id, |
412 | void *ref, u32 act_status) | 406 | u32 act_status) |
413 | { | 407 | { |
414 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); | 408 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); |
415 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; | 409 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; |
@@ -420,17 +414,18 @@ static void _zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id, | |||
420 | return; | 414 | return; |
421 | 415 | ||
422 | zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter, | 416 | zfcp_erp_action_enqueue(ZFCP_ERP_ACTION_REOPEN_LUN, adapter, |
423 | zfcp_sdev->port, sdev, id, ref, act_status); | 417 | zfcp_sdev->port, sdev, id, act_status); |
424 | } | 418 | } |
425 | 419 | ||
426 | /** | 420 | /** |
427 | * zfcp_erp_lun_reopen - initiate reopen of a LUN | 421 | * zfcp_erp_lun_reopen - initiate reopen of a LUN |
428 | * @sdev: SCSI device / LUN to be reopened | 422 | * @sdev: SCSI device / LUN to be reopened |
429 | * @clear_mask: specifies flags in LUN status to be cleared | 423 | * @clear_mask: specifies flags in LUN status to be cleared |
424 | * @id: Id for debug trace event. | ||
425 | * | ||
430 | * Return: 0 on success, < 0 on error | 426 | * Return: 0 on success, < 0 on error |
431 | */ | 427 | */ |
432 | void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id, | 428 | void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id) |
433 | void *ref) | ||
434 | { | 429 | { |
435 | unsigned long flags; | 430 | unsigned long flags; |
436 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); | 431 | struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(sdev); |
@@ -438,7 +433,7 @@ void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id, | |||
438 | struct zfcp_adapter *adapter = port->adapter; | 433 | struct zfcp_adapter *adapter = port->adapter; |
439 | 434 | ||
440 | write_lock_irqsave(&adapter->erp_lock, flags); | 435 | write_lock_irqsave(&adapter->erp_lock, flags); |
441 | _zfcp_erp_lun_reopen(sdev, clear, id, ref, 0); | 436 | _zfcp_erp_lun_reopen(sdev, clear, id, 0); |
442 | write_unlock_irqrestore(&adapter->erp_lock, flags); | 437 | write_unlock_irqrestore(&adapter->erp_lock, flags); |
443 | } | 438 | } |
444 | 439 | ||
@@ -447,13 +442,11 @@ void zfcp_erp_lun_reopen(struct scsi_device *sdev, int clear, char *id, | |||
447 | * @sdev: SCSI device / LUN to shut down. | 442 | * @sdev: SCSI device / LUN to shut down. |
448 | * @clear: Status flags to clear. | 443 | * @clear: Status flags to clear. |
449 | * @id: Id for debug trace event. | 444 | * @id: Id for debug trace event. |
450 | * @ref: Reference for debug trace event. | ||
451 | */ | 445 | */ |
452 | void zfcp_erp_lun_shutdown(struct scsi_device *sdev, int clear, char *id, | 446 | void zfcp_erp_lun_shutdown(struct scsi_device *sdev, int clear, char *id) |
453 | void *ref) | ||
454 | { | 447 | { |
455 | int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; | 448 | int flags = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; |
456 | zfcp_erp_lun_reopen(sdev, clear | flags, id, ref); | 449 | zfcp_erp_lun_reopen(sdev, clear | flags, id); |
457 | } | 450 | } |
458 | 451 | ||
459 | /** | 452 | /** |
@@ -475,7 +468,7 @@ void zfcp_erp_lun_shutdown_wait(struct scsi_device *sdev, char *id) | |||
475 | int clear = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; | 468 | int clear = ZFCP_STATUS_COMMON_RUNNING | ZFCP_STATUS_COMMON_ERP_FAILED; |
476 | 469 | ||
477 | write_lock_irqsave(&adapter->erp_lock, flags); | 470 | write_lock_irqsave(&adapter->erp_lock, flags); |
478 | _zfcp_erp_lun_reopen(sdev, clear, id, NULL, ZFCP_STATUS_ERP_NO_REF); | 471 | _zfcp_erp_lun_reopen(sdev, clear, id, ZFCP_STATUS_ERP_NO_REF); |
479 | write_unlock_irqrestore(&adapter->erp_lock, flags); | 472 | write_unlock_irqrestore(&adapter->erp_lock, flags); |
480 | 473 | ||
481 | zfcp_erp_wait(adapter); | 474 | zfcp_erp_wait(adapter); |
@@ -584,40 +577,40 @@ static void zfcp_erp_strategy_memwait(struct zfcp_erp_action *erp_action) | |||
584 | } | 577 | } |
585 | 578 | ||
586 | static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter, | 579 | static void _zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter, |
587 | int clear, char *id, void *ref) | 580 | int clear, char *id) |
588 | { | 581 | { |
589 | struct zfcp_port *port; | 582 | struct zfcp_port *port; |
590 | 583 | ||
591 | read_lock(&adapter->port_list_lock); | 584 | read_lock(&adapter->port_list_lock); |
592 | list_for_each_entry(port, &adapter->port_list, list) | 585 | list_for_each_entry(port, &adapter->port_list, list) |
593 | _zfcp_erp_port_reopen(port, clear, id, ref); | 586 | _zfcp_erp_port_reopen(port, clear, id); |
594 | read_unlock(&adapter->port_list_lock); | 587 | read_unlock(&adapter->port_list_lock); |
595 | } | 588 | } |
596 | 589 | ||
597 | static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear, | 590 | static void _zfcp_erp_lun_reopen_all(struct zfcp_port *port, int clear, |
598 | char *id, void *ref) | 591 | char *id) |
599 | { | 592 | { |
600 | struct scsi_device *sdev; | 593 | struct scsi_device *sdev; |
601 | 594 | ||
602 | shost_for_each_device(sdev, port->adapter->scsi_host) | 595 | shost_for_each_device(sdev, port->adapter->scsi_host) |
603 | if (sdev_to_zfcp(sdev)->port == port) | 596 | if (sdev_to_zfcp(sdev)->port == port) |
604 | _zfcp_erp_lun_reopen(sdev, clear, id, ref, 0); | 597 | _zfcp_erp_lun_reopen(sdev, clear, id, 0); |
605 | } | 598 | } |
606 | 599 | ||
607 | static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act) | 600 | static void zfcp_erp_strategy_followup_failed(struct zfcp_erp_action *act) |
608 | { | 601 | { |
609 | switch (act->action) { | 602 | switch (act->action) { |
610 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: | 603 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: |
611 | _zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1", NULL); | 604 | _zfcp_erp_adapter_reopen(act->adapter, 0, "ersff_1"); |
612 | break; | 605 | break; |
613 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: | 606 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: |
614 | _zfcp_erp_port_forced_reopen(act->port, 0, "ersff_2", NULL); | 607 | _zfcp_erp_port_forced_reopen(act->port, 0, "ersff_2"); |
615 | break; | 608 | break; |
616 | case ZFCP_ERP_ACTION_REOPEN_PORT: | 609 | case ZFCP_ERP_ACTION_REOPEN_PORT: |
617 | _zfcp_erp_port_reopen(act->port, 0, "ersff_3", NULL); | 610 | _zfcp_erp_port_reopen(act->port, 0, "ersff_3"); |
618 | break; | 611 | break; |
619 | case ZFCP_ERP_ACTION_REOPEN_LUN: | 612 | case ZFCP_ERP_ACTION_REOPEN_LUN: |
620 | _zfcp_erp_lun_reopen(act->sdev, 0, "ersff_4", NULL, 0); | 613 | _zfcp_erp_lun_reopen(act->sdev, 0, "ersff_4", 0); |
621 | break; | 614 | break; |
622 | } | 615 | } |
623 | } | 616 | } |
@@ -626,13 +619,13 @@ static void zfcp_erp_strategy_followup_success(struct zfcp_erp_action *act) | |||
626 | { | 619 | { |
627 | switch (act->action) { | 620 | switch (act->action) { |
628 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: | 621 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: |
629 | _zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1", NULL); | 622 | _zfcp_erp_port_reopen_all(act->adapter, 0, "ersfs_1"); |
630 | break; | 623 | break; |
631 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: | 624 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: |
632 | _zfcp_erp_port_reopen(act->port, 0, "ersfs_2", NULL); | 625 | _zfcp_erp_port_reopen(act->port, 0, "ersfs_2"); |
633 | break; | 626 | break; |
634 | case ZFCP_ERP_ACTION_REOPEN_PORT: | 627 | case ZFCP_ERP_ACTION_REOPEN_PORT: |
635 | _zfcp_erp_lun_reopen_all(act->port, 0, "ersfs_3", NULL); | 628 | _zfcp_erp_lun_reopen_all(act->port, 0, "ersfs_3"); |
636 | break; | 629 | break; |
637 | } | 630 | } |
638 | } | 631 | } |
@@ -669,7 +662,7 @@ static void zfcp_erp_enqueue_ptp_port(struct zfcp_adapter *adapter) | |||
669 | adapter->peer_d_id); | 662 | adapter->peer_d_id); |
670 | if (IS_ERR(port)) /* error or port already attached */ | 663 | if (IS_ERR(port)) /* error or port already attached */ |
671 | return; | 664 | return; |
672 | _zfcp_erp_port_reopen(port, 0, "ereptp1", NULL); | 665 | _zfcp_erp_port_reopen(port, 0, "ereptp1"); |
673 | } | 666 | } |
674 | 667 | ||
675 | static int zfcp_erp_adapter_strat_fsf_xconf(struct zfcp_erp_action *erp_action) | 668 | static int zfcp_erp_adapter_strat_fsf_xconf(struct zfcp_erp_action *erp_action) |
@@ -1163,7 +1156,7 @@ static int zfcp_erp_strategy_statechange(struct zfcp_erp_action *act, int ret) | |||
1163 | if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) { | 1156 | if (zfcp_erp_strat_change_det(&adapter->status, erp_status)) { |
1164 | _zfcp_erp_adapter_reopen(adapter, | 1157 | _zfcp_erp_adapter_reopen(adapter, |
1165 | ZFCP_STATUS_COMMON_ERP_FAILED, | 1158 | ZFCP_STATUS_COMMON_ERP_FAILED, |
1166 | "ersscg1", NULL); | 1159 | "ersscg1"); |
1167 | return ZFCP_ERP_EXIT; | 1160 | return ZFCP_ERP_EXIT; |
1168 | } | 1161 | } |
1169 | break; | 1162 | break; |
@@ -1173,7 +1166,7 @@ static int zfcp_erp_strategy_statechange(struct zfcp_erp_action *act, int ret) | |||
1173 | if (zfcp_erp_strat_change_det(&port->status, erp_status)) { | 1166 | if (zfcp_erp_strat_change_det(&port->status, erp_status)) { |
1174 | _zfcp_erp_port_reopen(port, | 1167 | _zfcp_erp_port_reopen(port, |
1175 | ZFCP_STATUS_COMMON_ERP_FAILED, | 1168 | ZFCP_STATUS_COMMON_ERP_FAILED, |
1176 | "ersscg2", NULL); | 1169 | "ersscg2"); |
1177 | return ZFCP_ERP_EXIT; | 1170 | return ZFCP_ERP_EXIT; |
1178 | } | 1171 | } |
1179 | break; | 1172 | break; |
@@ -1183,7 +1176,7 @@ static int zfcp_erp_strategy_statechange(struct zfcp_erp_action *act, int ret) | |||
1183 | if (zfcp_erp_strat_change_det(&zfcp_sdev->status, erp_status)) { | 1176 | if (zfcp_erp_strat_change_det(&zfcp_sdev->status, erp_status)) { |
1184 | _zfcp_erp_lun_reopen(sdev, | 1177 | _zfcp_erp_lun_reopen(sdev, |
1185 | ZFCP_STATUS_COMMON_ERP_FAILED, | 1178 | ZFCP_STATUS_COMMON_ERP_FAILED, |
1186 | "ersscg3", NULL, 0); | 1179 | "ersscg3", 0); |
1187 | return ZFCP_ERP_EXIT; | 1180 | return ZFCP_ERP_EXIT; |
1188 | } | 1181 | } |
1189 | break; | 1182 | break; |
@@ -1310,7 +1303,7 @@ static int zfcp_erp_strategy(struct zfcp_erp_action *erp_action) | |||
1310 | erp_action->status |= ZFCP_STATUS_ERP_LOWMEM; | 1303 | erp_action->status |= ZFCP_STATUS_ERP_LOWMEM; |
1311 | } | 1304 | } |
1312 | if (adapter->erp_total_count == adapter->erp_low_mem_count) | 1305 | if (adapter->erp_total_count == adapter->erp_low_mem_count) |
1313 | _zfcp_erp_adapter_reopen(adapter, 0, "erstgy1", NULL); | 1306 | _zfcp_erp_adapter_reopen(adapter, 0, "erstgy1"); |
1314 | else { | 1307 | else { |
1315 | zfcp_erp_strategy_memwait(erp_action); | 1308 | zfcp_erp_strategy_memwait(erp_action); |
1316 | retval = ZFCP_ERP_CONTINUES; | 1309 | retval = ZFCP_ERP_CONTINUES; |
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h index b68a546275a5..6e325284fbe7 100644 --- a/drivers/s390/scsi/zfcp_ext.h +++ b/drivers/s390/scsi/zfcp_ext.h | |||
@@ -45,7 +45,7 @@ extern void zfcp_cfdc_adapter_access_changed(struct zfcp_adapter *); | |||
45 | 45 | ||
46 | /* zfcp_dbf.c */ | 46 | /* zfcp_dbf.c */ |
47 | extern int zfcp_dbf_adapter_register(struct zfcp_adapter *); | 47 | extern int zfcp_dbf_adapter_register(struct zfcp_adapter *); |
48 | extern void zfcp_dbf_adapter_unregister(struct zfcp_dbf *); | 48 | extern void zfcp_dbf_adapter_unregister(struct zfcp_adapter *); |
49 | extern void zfcp_dbf_rec_trig(char *, struct zfcp_adapter *, | 49 | extern void zfcp_dbf_rec_trig(char *, struct zfcp_adapter *, |
50 | struct zfcp_port *, struct scsi_device *, u8, u8); | 50 | struct zfcp_port *, struct scsi_device *, u8, u8); |
51 | extern void zfcp_dbf_rec_run(char *, struct zfcp_erp_action *); | 51 | extern void zfcp_dbf_rec_run(char *, struct zfcp_erp_action *); |
@@ -61,19 +61,17 @@ extern void zfcp_dbf_scsi(char *, struct scsi_cmnd *, struct zfcp_fsf_req *); | |||
61 | /* zfcp_erp.c */ | 61 | /* zfcp_erp.c */ |
62 | extern void zfcp_erp_set_adapter_status(struct zfcp_adapter *, u32); | 62 | extern void zfcp_erp_set_adapter_status(struct zfcp_adapter *, u32); |
63 | extern void zfcp_erp_clear_adapter_status(struct zfcp_adapter *, u32); | 63 | extern void zfcp_erp_clear_adapter_status(struct zfcp_adapter *, u32); |
64 | extern void zfcp_erp_adapter_reopen(struct zfcp_adapter *, int, char *, void *); | 64 | extern void zfcp_erp_adapter_reopen(struct zfcp_adapter *, int, char *); |
65 | extern void zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int, char *, | 65 | extern void zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int, char *); |
66 | void *); | ||
67 | extern void zfcp_erp_set_port_status(struct zfcp_port *, u32); | 66 | extern void zfcp_erp_set_port_status(struct zfcp_port *, u32); |
68 | extern void zfcp_erp_clear_port_status(struct zfcp_port *, u32); | 67 | extern void zfcp_erp_clear_port_status(struct zfcp_port *, u32); |
69 | extern int zfcp_erp_port_reopen(struct zfcp_port *, int, char *, void *); | 68 | extern int zfcp_erp_port_reopen(struct zfcp_port *, int, char *); |
70 | extern void zfcp_erp_port_shutdown(struct zfcp_port *, int, char *, void *); | 69 | extern void zfcp_erp_port_shutdown(struct zfcp_port *, int, char *); |
71 | extern void zfcp_erp_port_forced_reopen(struct zfcp_port *, int, char *, | 70 | extern void zfcp_erp_port_forced_reopen(struct zfcp_port *, int, char *); |
72 | void *); | ||
73 | extern void zfcp_erp_set_lun_status(struct scsi_device *, u32); | 71 | extern void zfcp_erp_set_lun_status(struct scsi_device *, u32); |
74 | extern void zfcp_erp_clear_lun_status(struct scsi_device *, u32); | 72 | extern void zfcp_erp_clear_lun_status(struct scsi_device *, u32); |
75 | extern void zfcp_erp_lun_reopen(struct scsi_device *, int, char *, void *); | 73 | extern void zfcp_erp_lun_reopen(struct scsi_device *, int, char *); |
76 | extern void zfcp_erp_lun_shutdown(struct scsi_device *, int, char *, void *); | 74 | extern void zfcp_erp_lun_shutdown(struct scsi_device *, int, char *); |
77 | extern void zfcp_erp_lun_shutdown_wait(struct scsi_device *, char *); | 75 | extern void zfcp_erp_lun_shutdown_wait(struct scsi_device *, char *); |
78 | extern int zfcp_erp_thread_setup(struct zfcp_adapter *); | 76 | extern int zfcp_erp_thread_setup(struct zfcp_adapter *); |
79 | extern void zfcp_erp_thread_kill(struct zfcp_adapter *); | 77 | extern void zfcp_erp_thread_kill(struct zfcp_adapter *); |
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index 7d44d9c59bdc..30cf91a787a3 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -174,7 +174,7 @@ static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range, | |||
174 | if (!port->d_id) | 174 | if (!port->d_id) |
175 | zfcp_erp_port_reopen(port, | 175 | zfcp_erp_port_reopen(port, |
176 | ZFCP_STATUS_COMMON_ERP_FAILED, | 176 | ZFCP_STATUS_COMMON_ERP_FAILED, |
177 | "fcrscn1", NULL); | 177 | "fcrscn1"); |
178 | } | 178 | } |
179 | read_unlock_irqrestore(&adapter->port_list_lock, flags); | 179 | read_unlock_irqrestore(&adapter->port_list_lock, flags); |
180 | } | 180 | } |
@@ -215,7 +215,7 @@ static void zfcp_fc_incoming_wwpn(struct zfcp_fsf_req *req, u64 wwpn) | |||
215 | read_lock_irqsave(&adapter->port_list_lock, flags); | 215 | read_lock_irqsave(&adapter->port_list_lock, flags); |
216 | list_for_each_entry(port, &adapter->port_list, list) | 216 | list_for_each_entry(port, &adapter->port_list, list) |
217 | if (port->wwpn == wwpn) { | 217 | if (port->wwpn == wwpn) { |
218 | zfcp_erp_port_forced_reopen(port, 0, "fciwwp1", req); | 218 | zfcp_erp_port_forced_reopen(port, 0, "fciwwp1"); |
219 | break; | 219 | break; |
220 | } | 220 | } |
221 | read_unlock_irqrestore(&adapter->port_list_lock, flags); | 221 | read_unlock_irqrestore(&adapter->port_list_lock, flags); |
@@ -360,7 +360,7 @@ void zfcp_fc_port_did_lookup(struct work_struct *work) | |||
360 | ret = zfcp_fc_ns_gid_pn(port); | 360 | ret = zfcp_fc_ns_gid_pn(port); |
361 | if (ret) { | 361 | if (ret) { |
362 | /* could not issue gid_pn for some reason */ | 362 | /* could not issue gid_pn for some reason */ |
363 | zfcp_erp_adapter_reopen(port->adapter, 0, "fcgpn_1", NULL); | 363 | zfcp_erp_adapter_reopen(port->adapter, 0, "fcgpn_1"); |
364 | goto out; | 364 | goto out; |
365 | } | 365 | } |
366 | 366 | ||
@@ -369,7 +369,7 @@ void zfcp_fc_port_did_lookup(struct work_struct *work) | |||
369 | goto out; | 369 | goto out; |
370 | } | 370 | } |
371 | 371 | ||
372 | zfcp_erp_port_reopen(port, 0, "fcgpn_3", NULL); | 372 | zfcp_erp_port_reopen(port, 0, "fcgpn_3"); |
373 | out: | 373 | out: |
374 | put_device(&port->dev); | 374 | put_device(&port->dev); |
375 | } | 375 | } |
@@ -426,7 +426,7 @@ static void zfcp_fc_adisc_handler(void *data) | |||
426 | if (adisc->els.status) { | 426 | if (adisc->els.status) { |
427 | /* request rejected or timed out */ | 427 | /* request rejected or timed out */ |
428 | zfcp_erp_port_forced_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, | 428 | zfcp_erp_port_forced_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, |
429 | "fcadh_1", NULL); | 429 | "fcadh_1"); |
430 | goto out; | 430 | goto out; |
431 | } | 431 | } |
432 | 432 | ||
@@ -436,7 +436,7 @@ static void zfcp_fc_adisc_handler(void *data) | |||
436 | if ((port->wwpn != adisc_resp->adisc_wwpn) || | 436 | if ((port->wwpn != adisc_resp->adisc_wwpn) || |
437 | !(atomic_read(&port->status) & ZFCP_STATUS_COMMON_OPEN)) { | 437 | !(atomic_read(&port->status) & ZFCP_STATUS_COMMON_OPEN)) { |
438 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, | 438 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, |
439 | "fcadh_2", NULL); | 439 | "fcadh_2"); |
440 | goto out; | 440 | goto out; |
441 | } | 441 | } |
442 | 442 | ||
@@ -507,7 +507,7 @@ void zfcp_fc_link_test_work(struct work_struct *work) | |||
507 | 507 | ||
508 | /* send of ADISC was not possible */ | 508 | /* send of ADISC was not possible */ |
509 | atomic_clear_mask(ZFCP_STATUS_PORT_LINK_TEST, &port->status); | 509 | atomic_clear_mask(ZFCP_STATUS_PORT_LINK_TEST, &port->status); |
510 | zfcp_erp_port_forced_reopen(port, 0, "fcltwk1", NULL); | 510 | zfcp_erp_port_forced_reopen(port, 0, "fcltwk1"); |
511 | 511 | ||
512 | out: | 512 | out: |
513 | put_device(&port->dev); | 513 | put_device(&port->dev); |
@@ -659,7 +659,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_gpn_ft *gpn_ft, | |||
659 | port = zfcp_port_enqueue(adapter, acc->fp_wwpn, | 659 | port = zfcp_port_enqueue(adapter, acc->fp_wwpn, |
660 | ZFCP_STATUS_COMMON_NOESC, d_id); | 660 | ZFCP_STATUS_COMMON_NOESC, d_id); |
661 | if (!IS_ERR(port)) | 661 | if (!IS_ERR(port)) |
662 | zfcp_erp_port_reopen(port, 0, "fcegpf1", NULL); | 662 | zfcp_erp_port_reopen(port, 0, "fcegpf1"); |
663 | else if (PTR_ERR(port) != -EEXIST) | 663 | else if (PTR_ERR(port) != -EEXIST) |
664 | ret = PTR_ERR(port); | 664 | ret = PTR_ERR(port); |
665 | } | 665 | } |
@@ -671,7 +671,7 @@ static int zfcp_fc_eval_gpn_ft(struct zfcp_fc_gpn_ft *gpn_ft, | |||
671 | write_unlock_irqrestore(&adapter->port_list_lock, flags); | 671 | write_unlock_irqrestore(&adapter->port_list_lock, flags); |
672 | 672 | ||
673 | list_for_each_entry_safe(port, tmp, &remove_lh, list) { | 673 | list_for_each_entry_safe(port, tmp, &remove_lh, list) { |
674 | zfcp_erp_port_shutdown(port, 0, "fcegpf2", NULL); | 674 | zfcp_erp_port_shutdown(port, 0, "fcegpf2"); |
675 | zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); | 675 | zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); |
676 | } | 676 | } |
677 | 677 | ||
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 5bb118e01f36..60ff9d172c79 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -23,7 +23,7 @@ static void zfcp_fsf_request_timeout_handler(unsigned long data) | |||
23 | struct zfcp_adapter *adapter = (struct zfcp_adapter *) data; | 23 | struct zfcp_adapter *adapter = (struct zfcp_adapter *) data; |
24 | zfcp_qdio_siosl(adapter); | 24 | zfcp_qdio_siosl(adapter); |
25 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, | 25 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, |
26 | "fsrth_1", NULL); | 26 | "fsrth_1"); |
27 | } | 27 | } |
28 | 28 | ||
29 | static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req, | 29 | static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req, |
@@ -65,7 +65,7 @@ static void zfcp_fsf_class_not_supp(struct zfcp_fsf_req *req) | |||
65 | { | 65 | { |
66 | dev_err(&req->adapter->ccw_device->dev, "FCP device not " | 66 | dev_err(&req->adapter->ccw_device->dev, "FCP device not " |
67 | "operational because of an unsupported FC class\n"); | 67 | "operational because of an unsupported FC class\n"); |
68 | zfcp_erp_adapter_shutdown(req->adapter, 0, "fscns_1", req); | 68 | zfcp_erp_adapter_shutdown(req->adapter, 0, "fscns_1"); |
69 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 69 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
70 | } | 70 | } |
71 | 71 | ||
@@ -98,7 +98,7 @@ static void zfcp_fsf_status_read_port_closed(struct zfcp_fsf_req *req) | |||
98 | read_lock_irqsave(&adapter->port_list_lock, flags); | 98 | read_lock_irqsave(&adapter->port_list_lock, flags); |
99 | list_for_each_entry(port, &adapter->port_list, list) | 99 | list_for_each_entry(port, &adapter->port_list, list) |
100 | if (port->d_id == d_id) { | 100 | if (port->d_id == d_id) { |
101 | zfcp_erp_port_reopen(port, 0, "fssrpc1", req); | 101 | zfcp_erp_port_reopen(port, 0, "fssrpc1"); |
102 | break; | 102 | break; |
103 | } | 103 | } |
104 | read_unlock_irqrestore(&adapter->port_list_lock, flags); | 104 | read_unlock_irqrestore(&adapter->port_list_lock, flags); |
@@ -247,7 +247,7 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req) | |||
247 | zfcp_erp_adapter_reopen(adapter, | 247 | zfcp_erp_adapter_reopen(adapter, |
248 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | | 248 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | |
249 | ZFCP_STATUS_COMMON_ERP_FAILED, | 249 | ZFCP_STATUS_COMMON_ERP_FAILED, |
250 | "fssrh_2", req); | 250 | "fssrh_2"); |
251 | zfcp_fc_enqueue_event(adapter, FCH_EVT_LINKUP, 0); | 251 | zfcp_fc_enqueue_event(adapter, FCH_EVT_LINKUP, 0); |
252 | 252 | ||
253 | break; | 253 | break; |
@@ -287,7 +287,7 @@ static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req) | |||
287 | "The FCP adapter reported a problem " | 287 | "The FCP adapter reported a problem " |
288 | "that cannot be recovered\n"); | 288 | "that cannot be recovered\n"); |
289 | zfcp_qdio_siosl(req->adapter); | 289 | zfcp_qdio_siosl(req->adapter); |
290 | zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfsqe1", req); | 290 | zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfsqe1"); |
291 | break; | 291 | break; |
292 | } | 292 | } |
293 | /* all non-return stats set FSFREQ_ERROR*/ | 293 | /* all non-return stats set FSFREQ_ERROR*/ |
@@ -304,7 +304,7 @@ static void zfcp_fsf_fsfstatus_eval(struct zfcp_fsf_req *req) | |||
304 | dev_err(&req->adapter->ccw_device->dev, | 304 | dev_err(&req->adapter->ccw_device->dev, |
305 | "The FCP adapter does not recognize the command 0x%x\n", | 305 | "The FCP adapter does not recognize the command 0x%x\n", |
306 | req->qtcb->header.fsf_command); | 306 | req->qtcb->header.fsf_command); |
307 | zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfse_1", req); | 307 | zfcp_erp_adapter_shutdown(req->adapter, 0, "fsfse_1"); |
308 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 308 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
309 | break; | 309 | break; |
310 | case FSF_ADAPTER_STATUS_AVAILABLE: | 310 | case FSF_ADAPTER_STATUS_AVAILABLE: |
@@ -335,17 +335,17 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
335 | "QTCB version 0x%x not supported by FCP adapter " | 335 | "QTCB version 0x%x not supported by FCP adapter " |
336 | "(0x%x to 0x%x)\n", FSF_QTCB_CURRENT_VERSION, | 336 | "(0x%x to 0x%x)\n", FSF_QTCB_CURRENT_VERSION, |
337 | psq->word[0], psq->word[1]); | 337 | psq->word[0], psq->word[1]); |
338 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_1", req); | 338 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_1"); |
339 | break; | 339 | break; |
340 | case FSF_PROT_ERROR_STATE: | 340 | case FSF_PROT_ERROR_STATE: |
341 | case FSF_PROT_SEQ_NUMB_ERROR: | 341 | case FSF_PROT_SEQ_NUMB_ERROR: |
342 | zfcp_erp_adapter_reopen(adapter, 0, "fspse_2", req); | 342 | zfcp_erp_adapter_reopen(adapter, 0, "fspse_2"); |
343 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 343 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
344 | break; | 344 | break; |
345 | case FSF_PROT_UNSUPP_QTCB_TYPE: | 345 | case FSF_PROT_UNSUPP_QTCB_TYPE: |
346 | dev_err(&adapter->ccw_device->dev, | 346 | dev_err(&adapter->ccw_device->dev, |
347 | "The QTCB type is not supported by the FCP adapter\n"); | 347 | "The QTCB type is not supported by the FCP adapter\n"); |
348 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_3", req); | 348 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_3"); |
349 | break; | 349 | break; |
350 | case FSF_PROT_HOST_CONNECTION_INITIALIZING: | 350 | case FSF_PROT_HOST_CONNECTION_INITIALIZING: |
351 | atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, | 351 | atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, |
@@ -355,12 +355,12 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
355 | dev_err(&adapter->ccw_device->dev, | 355 | dev_err(&adapter->ccw_device->dev, |
356 | "0x%Lx is an ambiguous request identifier\n", | 356 | "0x%Lx is an ambiguous request identifier\n", |
357 | (unsigned long long)qtcb->bottom.support.req_handle); | 357 | (unsigned long long)qtcb->bottom.support.req_handle); |
358 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_4", req); | 358 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_4"); |
359 | break; | 359 | break; |
360 | case FSF_PROT_LINK_DOWN: | 360 | case FSF_PROT_LINK_DOWN: |
361 | zfcp_fsf_link_down_info_eval(req, &psq->link_down_info); | 361 | zfcp_fsf_link_down_info_eval(req, &psq->link_down_info); |
362 | /* go through reopen to flush pending requests */ | 362 | /* go through reopen to flush pending requests */ |
363 | zfcp_erp_adapter_reopen(adapter, 0, "fspse_6", req); | 363 | zfcp_erp_adapter_reopen(adapter, 0, "fspse_6"); |
364 | break; | 364 | break; |
365 | case FSF_PROT_REEST_QUEUE: | 365 | case FSF_PROT_REEST_QUEUE: |
366 | /* All ports should be marked as ready to run again */ | 366 | /* All ports should be marked as ready to run again */ |
@@ -369,14 +369,14 @@ static void zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *req) | |||
369 | zfcp_erp_adapter_reopen(adapter, | 369 | zfcp_erp_adapter_reopen(adapter, |
370 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | | 370 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | |
371 | ZFCP_STATUS_COMMON_ERP_FAILED, | 371 | ZFCP_STATUS_COMMON_ERP_FAILED, |
372 | "fspse_8", req); | 372 | "fspse_8"); |
373 | break; | 373 | break; |
374 | default: | 374 | default: |
375 | dev_err(&adapter->ccw_device->dev, | 375 | dev_err(&adapter->ccw_device->dev, |
376 | "0x%x is not a valid transfer protocol status\n", | 376 | "0x%x is not a valid transfer protocol status\n", |
377 | qtcb->prefix.prot_status); | 377 | qtcb->prefix.prot_status); |
378 | zfcp_qdio_siosl(adapter); | 378 | zfcp_qdio_siosl(adapter); |
379 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_9", req); | 379 | zfcp_erp_adapter_shutdown(adapter, 0, "fspse_9"); |
380 | } | 380 | } |
381 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 381 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
382 | } | 382 | } |
@@ -482,7 +482,7 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) | |||
482 | dev_err(&adapter->ccw_device->dev, | 482 | dev_err(&adapter->ccw_device->dev, |
483 | "Unknown or unsupported arbitrated loop " | 483 | "Unknown or unsupported arbitrated loop " |
484 | "fibre channel topology detected\n"); | 484 | "fibre channel topology detected\n"); |
485 | zfcp_erp_adapter_shutdown(adapter, 0, "fsece_1", req); | 485 | zfcp_erp_adapter_shutdown(adapter, 0, "fsece_1"); |
486 | return -EIO; | 486 | return -EIO; |
487 | } | 487 | } |
488 | 488 | ||
@@ -518,7 +518,7 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req) | |||
518 | "FCP adapter maximum QTCB size (%d bytes) " | 518 | "FCP adapter maximum QTCB size (%d bytes) " |
519 | "is too small\n", | 519 | "is too small\n", |
520 | bottom->max_qtcb_size); | 520 | bottom->max_qtcb_size); |
521 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh1", req); | 521 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh1"); |
522 | return; | 522 | return; |
523 | } | 523 | } |
524 | atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, | 524 | atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, |
@@ -536,7 +536,7 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req) | |||
536 | &qtcb->header.fsf_status_qual.link_down_info); | 536 | &qtcb->header.fsf_status_qual.link_down_info); |
537 | break; | 537 | break; |
538 | default: | 538 | default: |
539 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3", req); | 539 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh3"); |
540 | return; | 540 | return; |
541 | } | 541 | } |
542 | 542 | ||
@@ -552,14 +552,14 @@ static void zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *req) | |||
552 | dev_err(&adapter->ccw_device->dev, | 552 | dev_err(&adapter->ccw_device->dev, |
553 | "The FCP adapter only supports newer " | 553 | "The FCP adapter only supports newer " |
554 | "control block versions\n"); | 554 | "control block versions\n"); |
555 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh4", req); | 555 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh4"); |
556 | return; | 556 | return; |
557 | } | 557 | } |
558 | if (FSF_QTCB_CURRENT_VERSION > bottom->high_qtcb_version) { | 558 | if (FSF_QTCB_CURRENT_VERSION > bottom->high_qtcb_version) { |
559 | dev_err(&adapter->ccw_device->dev, | 559 | dev_err(&adapter->ccw_device->dev, |
560 | "The FCP adapter only supports older " | 560 | "The FCP adapter only supports older " |
561 | "control block versions\n"); | 561 | "control block versions\n"); |
562 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh5", req); | 562 | zfcp_erp_adapter_shutdown(adapter, 0, "fsecdh5"); |
563 | } | 563 | } |
564 | } | 564 | } |
565 | 565 | ||
@@ -700,7 +700,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) | |||
700 | del_timer(&req->timer); | 700 | del_timer(&req->timer); |
701 | /* lookup request again, list might have changed */ | 701 | /* lookup request again, list might have changed */ |
702 | zfcp_reqlist_find_rm(adapter->req_list, req_id); | 702 | zfcp_reqlist_find_rm(adapter->req_list, req_id); |
703 | zfcp_erp_adapter_reopen(adapter, 0, "fsrs__1", req); | 703 | zfcp_erp_adapter_reopen(adapter, 0, "fsrs__1"); |
704 | return -EIO; | 704 | return -EIO; |
705 | } | 705 | } |
706 | 706 | ||
@@ -777,14 +777,13 @@ static void zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *req) | |||
777 | case FSF_PORT_HANDLE_NOT_VALID: | 777 | case FSF_PORT_HANDLE_NOT_VALID: |
778 | if (fsq->word[0] == fsq->word[1]) { | 778 | if (fsq->word[0] == fsq->word[1]) { |
779 | zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, | 779 | zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, |
780 | "fsafch1", req); | 780 | "fsafch1"); |
781 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 781 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
782 | } | 782 | } |
783 | break; | 783 | break; |
784 | case FSF_LUN_HANDLE_NOT_VALID: | 784 | case FSF_LUN_HANDLE_NOT_VALID: |
785 | if (fsq->word[0] == fsq->word[1]) { | 785 | if (fsq->word[0] == fsq->word[1]) { |
786 | zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fsafch2", | 786 | zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fsafch2"); |
787 | req); | ||
788 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 787 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
789 | } | 788 | } |
790 | break; | 789 | break; |
@@ -795,14 +794,13 @@ static void zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *req) | |||
795 | zfcp_erp_set_port_status(zfcp_sdev->port, | 794 | zfcp_erp_set_port_status(zfcp_sdev->port, |
796 | ZFCP_STATUS_COMMON_ACCESS_BOXED); | 795 | ZFCP_STATUS_COMMON_ACCESS_BOXED); |
797 | zfcp_erp_port_reopen(zfcp_sdev->port, | 796 | zfcp_erp_port_reopen(zfcp_sdev->port, |
798 | ZFCP_STATUS_COMMON_ERP_FAILED, "fsafch3", | 797 | ZFCP_STATUS_COMMON_ERP_FAILED, "fsafch3"); |
799 | req); | ||
800 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 798 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
801 | break; | 799 | break; |
802 | case FSF_LUN_BOXED: | 800 | case FSF_LUN_BOXED: |
803 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ACCESS_BOXED); | 801 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ACCESS_BOXED); |
804 | zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED, | 802 | zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED, |
805 | "fsafch4", req); | 803 | "fsafch4"); |
806 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 804 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
807 | break; | 805 | break; |
808 | case FSF_ADAPTER_STATUS_AVAILABLE: | 806 | case FSF_ADAPTER_STATUS_AVAILABLE: |
@@ -903,7 +901,7 @@ static void zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *req) | |||
903 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 901 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
904 | break; | 902 | break; |
905 | case FSF_PORT_HANDLE_NOT_VALID: | 903 | case FSF_PORT_HANDLE_NOT_VALID: |
906 | zfcp_erp_adapter_reopen(adapter, 0, "fsscth1", req); | 904 | zfcp_erp_adapter_reopen(adapter, 0, "fsscth1"); |
907 | /* fall through */ | 905 | /* fall through */ |
908 | case FSF_GENERIC_COMMAND_REJECTED: | 906 | case FSF_GENERIC_COMMAND_REJECTED: |
909 | case FSF_PAYLOAD_SIZE_MISMATCH: | 907 | case FSF_PAYLOAD_SIZE_MISMATCH: |
@@ -1449,7 +1447,7 @@ static void zfcp_fsf_close_port_handler(struct zfcp_fsf_req *req) | |||
1449 | 1447 | ||
1450 | switch (req->qtcb->header.fsf_status) { | 1448 | switch (req->qtcb->header.fsf_status) { |
1451 | case FSF_PORT_HANDLE_NOT_VALID: | 1449 | case FSF_PORT_HANDLE_NOT_VALID: |
1452 | zfcp_erp_adapter_reopen(port->adapter, 0, "fscph_1", req); | 1450 | zfcp_erp_adapter_reopen(port->adapter, 0, "fscph_1"); |
1453 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1451 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1454 | break; | 1452 | break; |
1455 | case FSF_ADAPTER_STATUS_AVAILABLE: | 1453 | case FSF_ADAPTER_STATUS_AVAILABLE: |
@@ -1581,7 +1579,7 @@ static void zfcp_fsf_close_wka_port_handler(struct zfcp_fsf_req *req) | |||
1581 | 1579 | ||
1582 | if (req->qtcb->header.fsf_status == FSF_PORT_HANDLE_NOT_VALID) { | 1580 | if (req->qtcb->header.fsf_status == FSF_PORT_HANDLE_NOT_VALID) { |
1583 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1581 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1584 | zfcp_erp_adapter_reopen(wka_port->adapter, 0, "fscwph1", req); | 1582 | zfcp_erp_adapter_reopen(wka_port->adapter, 0, "fscwph1"); |
1585 | } | 1583 | } |
1586 | 1584 | ||
1587 | wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; | 1585 | wka_port->status = ZFCP_FC_WKA_PORT_OFFLINE; |
@@ -1639,7 +1637,7 @@ static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req) | |||
1639 | 1637 | ||
1640 | switch (header->fsf_status) { | 1638 | switch (header->fsf_status) { |
1641 | case FSF_PORT_HANDLE_NOT_VALID: | 1639 | case FSF_PORT_HANDLE_NOT_VALID: |
1642 | zfcp_erp_adapter_reopen(port->adapter, 0, "fscpph1", req); | 1640 | zfcp_erp_adapter_reopen(port->adapter, 0, "fscpph1"); |
1643 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1641 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1644 | break; | 1642 | break; |
1645 | case FSF_ACCESS_DENIED: | 1643 | case FSF_ACCESS_DENIED: |
@@ -1655,7 +1653,7 @@ static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req) | |||
1655 | &sdev_to_zfcp(sdev)->status); | 1653 | &sdev_to_zfcp(sdev)->status); |
1656 | zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ACCESS_BOXED); | 1654 | zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_ACCESS_BOXED); |
1657 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, | 1655 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, |
1658 | "fscpph2", req); | 1656 | "fscpph2"); |
1659 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1657 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1660 | break; | 1658 | break; |
1661 | case FSF_ADAPTER_STATUS_AVAILABLE: | 1659 | case FSF_ADAPTER_STATUS_AVAILABLE: |
@@ -1744,7 +1742,7 @@ static void zfcp_fsf_open_lun_handler(struct zfcp_fsf_req *req) | |||
1744 | switch (header->fsf_status) { | 1742 | switch (header->fsf_status) { |
1745 | 1743 | ||
1746 | case FSF_PORT_HANDLE_NOT_VALID: | 1744 | case FSF_PORT_HANDLE_NOT_VALID: |
1747 | zfcp_erp_adapter_reopen(adapter, 0, "fsouh_1", req); | 1745 | zfcp_erp_adapter_reopen(adapter, 0, "fsouh_1"); |
1748 | /* fall through */ | 1746 | /* fall through */ |
1749 | case FSF_LUN_ALREADY_OPEN: | 1747 | case FSF_LUN_ALREADY_OPEN: |
1750 | break; | 1748 | break; |
@@ -1756,8 +1754,7 @@ static void zfcp_fsf_open_lun_handler(struct zfcp_fsf_req *req) | |||
1756 | zfcp_erp_set_port_status(zfcp_sdev->port, | 1754 | zfcp_erp_set_port_status(zfcp_sdev->port, |
1757 | ZFCP_STATUS_COMMON_ACCESS_BOXED); | 1755 | ZFCP_STATUS_COMMON_ACCESS_BOXED); |
1758 | zfcp_erp_port_reopen(zfcp_sdev->port, | 1756 | zfcp_erp_port_reopen(zfcp_sdev->port, |
1759 | ZFCP_STATUS_COMMON_ERP_FAILED, "fsouh_2", | 1757 | ZFCP_STATUS_COMMON_ERP_FAILED, "fsouh_2"); |
1760 | req); | ||
1761 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1758 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1762 | break; | 1759 | break; |
1763 | case FSF_LUN_SHARING_VIOLATION: | 1760 | case FSF_LUN_SHARING_VIOLATION: |
@@ -1853,20 +1850,18 @@ static void zfcp_fsf_close_lun_handler(struct zfcp_fsf_req *req) | |||
1853 | 1850 | ||
1854 | switch (req->qtcb->header.fsf_status) { | 1851 | switch (req->qtcb->header.fsf_status) { |
1855 | case FSF_PORT_HANDLE_NOT_VALID: | 1852 | case FSF_PORT_HANDLE_NOT_VALID: |
1856 | zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, "fscuh_1", | 1853 | zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, "fscuh_1"); |
1857 | req); | ||
1858 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1854 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1859 | break; | 1855 | break; |
1860 | case FSF_LUN_HANDLE_NOT_VALID: | 1856 | case FSF_LUN_HANDLE_NOT_VALID: |
1861 | zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fscuh_2", req); | 1857 | zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fscuh_2"); |
1862 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1858 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1863 | break; | 1859 | break; |
1864 | case FSF_PORT_BOXED: | 1860 | case FSF_PORT_BOXED: |
1865 | zfcp_erp_set_port_status(zfcp_sdev->port, | 1861 | zfcp_erp_set_port_status(zfcp_sdev->port, |
1866 | ZFCP_STATUS_COMMON_ACCESS_BOXED); | 1862 | ZFCP_STATUS_COMMON_ACCESS_BOXED); |
1867 | zfcp_erp_port_reopen(zfcp_sdev->port, | 1863 | zfcp_erp_port_reopen(zfcp_sdev->port, |
1868 | ZFCP_STATUS_COMMON_ERP_FAILED, "fscuh_3", | 1864 | ZFCP_STATUS_COMMON_ERP_FAILED, "fscuh_3"); |
1869 | req); | ||
1870 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 1865 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
1871 | break; | 1866 | break; |
1872 | case FSF_ADAPTER_STATUS_AVAILABLE: | 1867 | case FSF_ADAPTER_STATUS_AVAILABLE: |
@@ -2003,13 +1998,12 @@ static void zfcp_fsf_fcp_handler_common(struct zfcp_fsf_req *req) | |||
2003 | switch (header->fsf_status) { | 1998 | switch (header->fsf_status) { |
2004 | case FSF_HANDLE_MISMATCH: | 1999 | case FSF_HANDLE_MISMATCH: |
2005 | case FSF_PORT_HANDLE_NOT_VALID: | 2000 | case FSF_PORT_HANDLE_NOT_VALID: |
2006 | zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, "fssfch1", | 2001 | zfcp_erp_adapter_reopen(zfcp_sdev->port->adapter, 0, "fssfch1"); |
2007 | req); | ||
2008 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2002 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2009 | break; | 2003 | break; |
2010 | case FSF_FCPLUN_NOT_VALID: | 2004 | case FSF_FCPLUN_NOT_VALID: |
2011 | case FSF_LUN_HANDLE_NOT_VALID: | 2005 | case FSF_LUN_HANDLE_NOT_VALID: |
2012 | zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fssfch2", req); | 2006 | zfcp_erp_port_reopen(zfcp_sdev->port, 0, "fssfch2"); |
2013 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2007 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2014 | break; | 2008 | break; |
2015 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: | 2009 | case FSF_SERVICE_CLASS_NOT_SUPPORTED: |
@@ -2027,7 +2021,7 @@ static void zfcp_fsf_fcp_handler_common(struct zfcp_fsf_req *req) | |||
2027 | (unsigned long long)zfcp_scsi_dev_lun(sdev), | 2021 | (unsigned long long)zfcp_scsi_dev_lun(sdev), |
2028 | (unsigned long long)zfcp_sdev->port->wwpn); | 2022 | (unsigned long long)zfcp_sdev->port->wwpn); |
2029 | zfcp_erp_adapter_shutdown(zfcp_sdev->port->adapter, 0, | 2023 | zfcp_erp_adapter_shutdown(zfcp_sdev->port->adapter, 0, |
2030 | "fssfch3", req); | 2024 | "fssfch3"); |
2031 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2025 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2032 | break; | 2026 | break; |
2033 | case FSF_CMND_LENGTH_NOT_VALID: | 2027 | case FSF_CMND_LENGTH_NOT_VALID: |
@@ -2038,21 +2032,20 @@ static void zfcp_fsf_fcp_handler_common(struct zfcp_fsf_req *req) | |||
2038 | (unsigned long long)zfcp_scsi_dev_lun(sdev), | 2032 | (unsigned long long)zfcp_scsi_dev_lun(sdev), |
2039 | (unsigned long long)zfcp_sdev->port->wwpn); | 2033 | (unsigned long long)zfcp_sdev->port->wwpn); |
2040 | zfcp_erp_adapter_shutdown(zfcp_sdev->port->adapter, 0, | 2034 | zfcp_erp_adapter_shutdown(zfcp_sdev->port->adapter, 0, |
2041 | "fssfch4", req); | 2035 | "fssfch4"); |
2042 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2036 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2043 | break; | 2037 | break; |
2044 | case FSF_PORT_BOXED: | 2038 | case FSF_PORT_BOXED: |
2045 | zfcp_erp_set_port_status(zfcp_sdev->port, | 2039 | zfcp_erp_set_port_status(zfcp_sdev->port, |
2046 | ZFCP_STATUS_COMMON_ACCESS_BOXED); | 2040 | ZFCP_STATUS_COMMON_ACCESS_BOXED); |
2047 | zfcp_erp_port_reopen(zfcp_sdev->port, | 2041 | zfcp_erp_port_reopen(zfcp_sdev->port, |
2048 | ZFCP_STATUS_COMMON_ERP_FAILED, "fssfch5", | 2042 | ZFCP_STATUS_COMMON_ERP_FAILED, "fssfch5"); |
2049 | req); | ||
2050 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2043 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2051 | break; | 2044 | break; |
2052 | case FSF_LUN_BOXED: | 2045 | case FSF_LUN_BOXED: |
2053 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ACCESS_BOXED); | 2046 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_ACCESS_BOXED); |
2054 | zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED, | 2047 | zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED, |
2055 | "fssfch6", req); | 2048 | "fssfch6"); |
2056 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 2049 | req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
2057 | break; | 2050 | break; |
2058 | case FSF_ADAPTER_STATUS_AVAILABLE: | 2051 | case FSF_ADAPTER_STATUS_AVAILABLE: |
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index 434a33ba0509..d99c9dc9cfcb 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
@@ -41,7 +41,7 @@ static void zfcp_qdio_handler_error(struct zfcp_qdio *qdio, char *id, | |||
41 | zfcp_qdio_siosl(adapter); | 41 | zfcp_qdio_siosl(adapter); |
42 | zfcp_erp_adapter_reopen(adapter, | 42 | zfcp_erp_adapter_reopen(adapter, |
43 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | | 43 | ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED | |
44 | ZFCP_STATUS_COMMON_ERP_FAILED, id, NULL); | 44 | ZFCP_STATUS_COMMON_ERP_FAILED, id); |
45 | } | 45 | } |
46 | 46 | ||
47 | static void zfcp_qdio_zero_sbals(struct qdio_buffer *sbal[], int first, int cnt) | 47 | static void zfcp_qdio_zero_sbals(struct qdio_buffer *sbal[], int first, int cnt) |
@@ -114,7 +114,7 @@ static void zfcp_qdio_int_resp(struct ccw_device *cdev, unsigned int qdio_err, | |||
114 | * put SBALs back to response queue | 114 | * put SBALs back to response queue |
115 | */ | 115 | */ |
116 | if (do_QDIO(cdev, QDIO_FLAG_SYNC_INPUT, 0, idx, count)) | 116 | if (do_QDIO(cdev, QDIO_FLAG_SYNC_INPUT, 0, idx, count)) |
117 | zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdires2", NULL); | 117 | zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdires2"); |
118 | } | 118 | } |
119 | 119 | ||
120 | static struct qdio_buffer_element * | 120 | static struct qdio_buffer_element * |
@@ -234,7 +234,7 @@ int zfcp_qdio_sbal_get(struct zfcp_qdio *qdio) | |||
234 | if (!ret) { | 234 | if (!ret) { |
235 | atomic_inc(&qdio->req_q_full); | 235 | atomic_inc(&qdio->req_q_full); |
236 | /* assume hanging outbound queue, try queue recovery */ | 236 | /* assume hanging outbound queue, try queue recovery */ |
237 | zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdsbg_1", NULL); | 237 | zfcp_erp_adapter_reopen(qdio->adapter, 0, "qdsbg_1"); |
238 | } | 238 | } |
239 | 239 | ||
240 | spin_lock_irq(&qdio->req_q_lock); | 240 | spin_lock_irq(&qdio->req_q_lock); |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 8c5c1c89c098..59a653d15a19 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -154,7 +154,7 @@ static int zfcp_scsi_slave_alloc(struct scsi_device *sdev) | |||
154 | spin_lock_init(&zfcp_sdev->latencies.lock); | 154 | spin_lock_init(&zfcp_sdev->latencies.lock); |
155 | 155 | ||
156 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_RUNNING); | 156 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_RUNNING); |
157 | zfcp_erp_lun_reopen(sdev, 0, "scsla_1", NULL); | 157 | zfcp_erp_lun_reopen(sdev, 0, "scsla_1"); |
158 | zfcp_erp_wait(port->adapter); | 158 | zfcp_erp_wait(port->adapter); |
159 | 159 | ||
160 | return 0; | 160 | return 0; |
@@ -278,7 +278,7 @@ static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt) | |||
278 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; | 278 | struct zfcp_adapter *adapter = zfcp_sdev->port->adapter; |
279 | int ret; | 279 | int ret; |
280 | 280 | ||
281 | zfcp_erp_adapter_reopen(adapter, 0, "schrh_1", scpnt); | 281 | zfcp_erp_adapter_reopen(adapter, 0, "schrh_1"); |
282 | zfcp_erp_wait(adapter); | 282 | zfcp_erp_wait(adapter); |
283 | ret = fc_block_scsi_eh(scpnt); | 283 | ret = fc_block_scsi_eh(scpnt); |
284 | if (ret) | 284 | if (ret) |
@@ -516,7 +516,7 @@ static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport) | |||
516 | port = zfcp_get_port_by_wwpn(adapter, rport->port_name); | 516 | port = zfcp_get_port_by_wwpn(adapter, rport->port_name); |
517 | 517 | ||
518 | if (port) { | 518 | if (port) { |
519 | zfcp_erp_port_forced_reopen(port, 0, "sctrpi1", NULL); | 519 | zfcp_erp_port_forced_reopen(port, 0, "sctrpi1"); |
520 | put_device(&port->dev); | 520 | put_device(&port->dev); |
521 | } | 521 | } |
522 | } | 522 | } |
diff --git a/drivers/s390/scsi/zfcp_sysfs.c b/drivers/s390/scsi/zfcp_sysfs.c index 2f2c54f4718f..cdc4ff78a7ba 100644 --- a/drivers/s390/scsi/zfcp_sysfs.c +++ b/drivers/s390/scsi/zfcp_sysfs.c | |||
@@ -105,8 +105,7 @@ static ssize_t zfcp_sysfs_port_failed_store(struct device *dev, | |||
105 | return -EINVAL; | 105 | return -EINVAL; |
106 | 106 | ||
107 | zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_RUNNING); | 107 | zfcp_erp_set_port_status(port, ZFCP_STATUS_COMMON_RUNNING); |
108 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, "sypfai2", | 108 | zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED, "sypfai2"); |
109 | NULL); | ||
110 | zfcp_erp_wait(port->adapter); | 109 | zfcp_erp_wait(port->adapter); |
111 | 110 | ||
112 | return count; | 111 | return count; |
@@ -148,7 +147,7 @@ static ssize_t zfcp_sysfs_unit_failed_store(struct device *dev, | |||
148 | if (sdev) { | 147 | if (sdev) { |
149 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_RUNNING); | 148 | zfcp_erp_set_lun_status(sdev, ZFCP_STATUS_COMMON_RUNNING); |
150 | zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED, | 149 | zfcp_erp_lun_reopen(sdev, ZFCP_STATUS_COMMON_ERP_FAILED, |
151 | "syufai2", NULL); | 150 | "syufai2"); |
152 | zfcp_erp_wait(unit->port->adapter); | 151 | zfcp_erp_wait(unit->port->adapter); |
153 | } else | 152 | } else |
154 | zfcp_unit_scsi_scan(unit); | 153 | zfcp_unit_scsi_scan(unit); |
@@ -198,7 +197,7 @@ static ssize_t zfcp_sysfs_adapter_failed_store(struct device *dev, | |||
198 | 197 | ||
199 | zfcp_erp_set_adapter_status(adapter, ZFCP_STATUS_COMMON_RUNNING); | 198 | zfcp_erp_set_adapter_status(adapter, ZFCP_STATUS_COMMON_RUNNING); |
200 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, | 199 | zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, |
201 | "syafai2", NULL); | 200 | "syafai2"); |
202 | zfcp_erp_wait(adapter); | 201 | zfcp_erp_wait(adapter); |
203 | out: | 202 | out: |
204 | zfcp_ccw_adapter_put(adapter); | 203 | zfcp_ccw_adapter_put(adapter); |
@@ -256,7 +255,7 @@ static ssize_t zfcp_sysfs_port_remove_store(struct device *dev, | |||
256 | 255 | ||
257 | put_device(&port->dev); | 256 | put_device(&port->dev); |
258 | 257 | ||
259 | zfcp_erp_port_shutdown(port, 0, "syprs_1", NULL); | 258 | zfcp_erp_port_shutdown(port, 0, "syprs_1"); |
260 | zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); | 259 | zfcp_device_unregister(&port->dev, &zfcp_sysfs_port_attrs); |
261 | out: | 260 | out: |
262 | zfcp_ccw_adapter_put(adapter); | 261 | zfcp_ccw_adapter_put(adapter); |