aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi/zfcp_erp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/scsi/zfcp_erp.c')
-rw-r--r--drivers/s390/scsi/zfcp_erp.c275
1 files changed, 33 insertions, 242 deletions
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
index 57cb628a05a..4682c8b8bd2 100644
--- a/drivers/s390/scsi/zfcp_erp.c
+++ b/drivers/s390/scsi/zfcp_erp.c
@@ -1,18 +1,8 @@
1/* 1/*
2 * 2 * This file is part of the zfcp device driver for
3 * linux/drivers/s390/scsi/zfcp_erp.c 3 * FCP adapters for IBM System z9 and zSeries.
4 * 4 *
5 * FCP adapter driver for IBM eServer zSeries 5 * (C) Copyright IBM Corp. 2002, 2006
6 *
7 * (C) Copyright IBM Corp. 2002, 2004
8 *
9 * Author(s): Martin Peschke <mpeschke@de.ibm.com>
10 * Raimund Schroeder <raimund.schroeder@de.ibm.com>
11 * Aron Zeh
12 * Wolfgang Taphorn
13 * Stefan Bader <stefan.bader@de.ibm.com>
14 * Heiko Carstens <heiko.carstens@de.ibm.com>
15 * Andreas Herrmann <aherrman@de.ibm.com>
16 * 6 *
17 * This program is free software; you can redistribute it and/or modify 7 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by 8 * it under the terms of the GNU General Public License as published by
@@ -231,13 +221,6 @@ zfcp_erp_adapter_reopen(struct zfcp_adapter *adapter, int clear_mask)
231 return retval; 221 return retval;
232} 222}
233 223
234/*
235 * function:
236 *
237 * purpose:
238 *
239 * returns:
240 */
241int 224int
242zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear_mask) 225zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear_mask)
243{ 226{
@@ -251,13 +234,6 @@ zfcp_erp_adapter_shutdown(struct zfcp_adapter *adapter, int clear_mask)
251 return retval; 234 return retval;
252} 235}
253 236
254/*
255 * function:
256 *
257 * purpose:
258 *
259 * returns:
260 */
261int 237int
262zfcp_erp_port_shutdown(struct zfcp_port *port, int clear_mask) 238zfcp_erp_port_shutdown(struct zfcp_port *port, int clear_mask)
263{ 239{
@@ -271,13 +247,6 @@ zfcp_erp_port_shutdown(struct zfcp_port *port, int clear_mask)
271 return retval; 247 return retval;
272} 248}
273 249
274/*
275 * function:
276 *
277 * purpose:
278 *
279 * returns:
280 */
281int 250int
282zfcp_erp_unit_shutdown(struct zfcp_unit *unit, int clear_mask) 251zfcp_erp_unit_shutdown(struct zfcp_unit *unit, int clear_mask)
283{ 252{
@@ -306,20 +275,17 @@ zfcp_erp_adisc(struct zfcp_port *port)
306 int retval = 0; 275 int retval = 0;
307 struct timer_list *timer; 276 struct timer_list *timer;
308 277
309 send_els = kmalloc(sizeof(struct zfcp_send_els), GFP_ATOMIC); 278 send_els = kzalloc(sizeof(struct zfcp_send_els), GFP_ATOMIC);
310 if (send_els == NULL) 279 if (send_els == NULL)
311 goto nomem; 280 goto nomem;
312 memset(send_els, 0, sizeof(*send_els));
313 281
314 send_els->req = kmalloc(sizeof(struct scatterlist), GFP_ATOMIC); 282 send_els->req = kzalloc(sizeof(struct scatterlist), GFP_ATOMIC);
315 if (send_els->req == NULL) 283 if (send_els->req == NULL)
316 goto nomem; 284 goto nomem;
317 memset(send_els->req, 0, sizeof(*send_els->req));
318 285
319 send_els->resp = kmalloc(sizeof(struct scatterlist), GFP_ATOMIC); 286 send_els->resp = kzalloc(sizeof(struct scatterlist), GFP_ATOMIC);
320 if (send_els->resp == NULL) 287 if (send_els->resp == NULL)
321 goto nomem; 288 goto nomem;
322 memset(send_els->resp, 0, sizeof(*send_els->resp));
323 289
324 address = (void *) get_zeroed_page(GFP_ATOMIC); 290 address = (void *) get_zeroed_page(GFP_ATOMIC);
325 if (address == NULL) 291 if (address == NULL)
@@ -812,13 +778,6 @@ zfcp_erp_unit_unblock(struct zfcp_unit *unit)
812 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status); 778 atomic_set_mask(ZFCP_STATUS_COMMON_UNBLOCKED, &unit->status);
813} 779}
814 780
815/*
816 * function:
817 *
818 * purpose:
819 *
820 * returns:
821 */
822static void 781static void
823zfcp_erp_action_ready(struct zfcp_erp_action *erp_action) 782zfcp_erp_action_ready(struct zfcp_erp_action *erp_action)
824{ 783{
@@ -1356,13 +1315,6 @@ zfcp_erp_strategy_check_action(struct zfcp_erp_action *erp_action, int retval)
1356 return retval; 1315 return retval;
1357} 1316}
1358 1317
1359/*
1360 * function:
1361 *
1362 * purpose:
1363 *
1364 * returns:
1365 */
1366static int 1318static int
1367zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action) 1319zfcp_erp_strategy_do_action(struct zfcp_erp_action *erp_action)
1368{ 1320{
@@ -1538,13 +1490,6 @@ zfcp_erp_strategy_check_target(struct zfcp_erp_action *erp_action, int result)
1538 return result; 1490 return result;
1539} 1491}
1540 1492
1541/*
1542 * function:
1543 *
1544 * purpose:
1545 *
1546 * returns:
1547 */
1548static int 1493static int
1549zfcp_erp_strategy_statechange(int action, 1494zfcp_erp_strategy_statechange(int action,
1550 u32 status, 1495 u32 status,
@@ -1586,13 +1531,6 @@ zfcp_erp_strategy_statechange(int action,
1586 return retval; 1531 return retval;
1587} 1532}
1588 1533
1589/*
1590 * function:
1591 *
1592 * purpose:
1593 *
1594 * returns:
1595 */
1596static inline int 1534static inline int
1597zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status) 1535zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status)
1598{ 1536{
@@ -1605,13 +1543,6 @@ zfcp_erp_strategy_statechange_detected(atomic_t * target_status, u32 erp_status)
1605 !(ZFCP_STATUS_ERP_CLOSE_ONLY & erp_status)); 1543 !(ZFCP_STATUS_ERP_CLOSE_ONLY & erp_status));
1606} 1544}
1607 1545
1608/*
1609 * function:
1610 *
1611 * purpose:
1612 *
1613 * returns:
1614 */
1615static int 1546static int
1616zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result) 1547zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result)
1617{ 1548{
@@ -1642,13 +1573,6 @@ zfcp_erp_strategy_check_unit(struct zfcp_unit *unit, int result)
1642 return result; 1573 return result;
1643} 1574}
1644 1575
1645/*
1646 * function:
1647 *
1648 * purpose:
1649 *
1650 * returns:
1651 */
1652static int 1576static int
1653zfcp_erp_strategy_check_port(struct zfcp_port *port, int result) 1577zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1654{ 1578{
@@ -1678,13 +1602,6 @@ zfcp_erp_strategy_check_port(struct zfcp_port *port, int result)
1678 return result; 1602 return result;
1679} 1603}
1680 1604
1681/*
1682 * function:
1683 *
1684 * purpose:
1685 *
1686 * returns:
1687 */
1688static int 1605static int
1689zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, int result) 1606zfcp_erp_strategy_check_adapter(struct zfcp_adapter *adapter, int result)
1690{ 1607{
@@ -1764,13 +1681,6 @@ zfcp_erp_strategy_followup_actions(int action,
1764 return 0; 1681 return 0;
1765} 1682}
1766 1683
1767/*
1768 * function:
1769 *
1770 * purpose:
1771 *
1772 * returns:
1773 */
1774static int 1684static int
1775zfcp_erp_strategy_check_queues(struct zfcp_adapter *adapter) 1685zfcp_erp_strategy_check_queues(struct zfcp_adapter *adapter)
1776{ 1686{
@@ -1809,12 +1719,6 @@ zfcp_erp_wait(struct zfcp_adapter *adapter)
1809 return retval; 1719 return retval;
1810} 1720}
1811 1721
1812/*
1813 * function: zfcp_erp_modify_adapter_status
1814 *
1815 * purpose:
1816 *
1817 */
1818void 1722void
1819zfcp_erp_modify_adapter_status(struct zfcp_adapter *adapter, 1723zfcp_erp_modify_adapter_status(struct zfcp_adapter *adapter,
1820 u32 mask, int set_or_clear) 1724 u32 mask, int set_or_clear)
@@ -1919,13 +1823,6 @@ zfcp_erp_port_reopen_all(struct zfcp_adapter *adapter, int clear_mask)
1919 return retval; 1823 return retval;
1920} 1824}
1921 1825
1922/*
1923 * function:
1924 *
1925 * purpose:
1926 *
1927 * returns: FIXME
1928 */
1929static int 1826static int
1930zfcp_erp_port_reopen_all_internal(struct zfcp_adapter *adapter, int clear_mask) 1827zfcp_erp_port_reopen_all_internal(struct zfcp_adapter *adapter, int clear_mask)
1931{ 1828{
@@ -2370,13 +2267,6 @@ zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *erp_action)
2370 return ret; 2267 return ret;
2371} 2268}
2372 2269
2373/*
2374 * function:
2375 *
2376 * purpose:
2377 *
2378 * returns:
2379 */
2380static int 2270static int
2381zfcp_erp_adapter_strategy_open_fsf_statusread(struct zfcp_erp_action 2271zfcp_erp_adapter_strategy_open_fsf_statusread(struct zfcp_erp_action
2382 *erp_action) 2272 *erp_action)
@@ -2545,13 +2435,6 @@ zfcp_erp_port_strategy(struct zfcp_erp_action *erp_action)
2545 return retval; 2435 return retval;
2546} 2436}
2547 2437
2548/*
2549 * function:
2550 *
2551 * purpose:
2552 *
2553 * returns:
2554 */
2555static int 2438static int
2556zfcp_erp_port_strategy_open(struct zfcp_erp_action *erp_action) 2439zfcp_erp_port_strategy_open(struct zfcp_erp_action *erp_action)
2557{ 2440{
@@ -2566,15 +2449,6 @@ zfcp_erp_port_strategy_open(struct zfcp_erp_action *erp_action)
2566 return retval; 2449 return retval;
2567} 2450}
2568 2451
2569/*
2570 * function:
2571 *
2572 * purpose:
2573 *
2574 * returns:
2575 *
2576 * FIXME(design): currently only prepared for fabric (nameserver!)
2577 */
2578static int 2452static int
2579zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *erp_action) 2453zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *erp_action)
2580{ 2454{
@@ -2690,13 +2564,6 @@ zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *erp_action)
2690 return retval; 2564 return retval;
2691} 2565}
2692 2566
2693/*
2694 * function:
2695 *
2696 * purpose:
2697 *
2698 * returns:
2699 */
2700static int 2567static int
2701zfcp_erp_port_strategy_open_nameserver(struct zfcp_erp_action *erp_action) 2568zfcp_erp_port_strategy_open_nameserver(struct zfcp_erp_action *erp_action)
2702{ 2569{
@@ -2813,13 +2680,6 @@ zfcp_erp_port_forced_strategy_close(struct zfcp_erp_action *erp_action)
2813 return retval; 2680 return retval;
2814} 2681}
2815 2682
2816/*
2817 * function:
2818 *
2819 * purpose:
2820 *
2821 * returns:
2822 */
2823static int 2683static int
2824zfcp_erp_port_strategy_clearstati(struct zfcp_port *port) 2684zfcp_erp_port_strategy_clearstati(struct zfcp_port *port)
2825{ 2685{
@@ -3022,13 +2882,6 @@ zfcp_erp_unit_strategy(struct zfcp_erp_action *erp_action)
3022 return retval; 2882 return retval;
3023} 2883}
3024 2884
3025/*
3026 * function:
3027 *
3028 * purpose:
3029 *
3030 * returns:
3031 */
3032static int 2885static int
3033zfcp_erp_unit_strategy_clearstati(struct zfcp_unit *unit) 2886zfcp_erp_unit_strategy_clearstati(struct zfcp_unit *unit)
3034{ 2887{
@@ -3129,13 +2982,6 @@ zfcp_erp_unit_strategy_open(struct zfcp_erp_action *erp_action)
3129 return retval; 2982 return retval;
3130} 2983}
3131 2984
3132/*
3133 * function:
3134 *
3135 * purpose:
3136 *
3137 * returns:
3138 */
3139static inline void 2985static inline void
3140zfcp_erp_timeout_init(struct zfcp_erp_action *erp_action) 2986zfcp_erp_timeout_init(struct zfcp_erp_action *erp_action)
3141{ 2987{
@@ -3331,13 +3177,6 @@ zfcp_erp_action_enqueue(int action,
3331 return retval; 3177 return retval;
3332} 3178}
3333 3179
3334/*
3335 * function:
3336 *
3337 * purpose:
3338 *
3339 * returns:
3340 */
3341static int 3180static int
3342zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action) 3181zfcp_erp_action_dequeue(struct zfcp_erp_action *erp_action)
3343{ 3182{
@@ -3402,9 +3241,13 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3402 break; 3241 break;
3403 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: 3242 case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
3404 case ZFCP_ERP_ACTION_REOPEN_PORT: 3243 case ZFCP_ERP_ACTION_REOPEN_PORT:
3244 if (atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN,
3245 &port->status)) {
3246 zfcp_port_put(port);
3247 break;
3248 }
3249
3405 if ((result == ZFCP_ERP_SUCCEEDED) 3250 if ((result == ZFCP_ERP_SUCCEEDED)
3406 && !atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN,
3407 &port->status)
3408 && !port->rport) { 3251 && !port->rport) {
3409 struct fc_rport_identifiers ids; 3252 struct fc_rport_identifiers ids;
3410 ids.node_name = port->wwnn; 3253 ids.node_name = port->wwnn;
@@ -3418,12 +3261,30 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3418 "(adapter %s, wwpn=0x%016Lx)\n", 3261 "(adapter %s, wwpn=0x%016Lx)\n",
3419 zfcp_get_busid_by_port(port), 3262 zfcp_get_busid_by_port(port),
3420 port->wwpn); 3263 port->wwpn);
3421 else 3264 else {
3422 scsi_flush_work(adapter->scsi_host); 3265 scsi_flush_work(adapter->scsi_host);
3266 port->rport->maxframe_size = port->maxframe_size;
3267 port->rport->supported_classes =
3268 port->supported_classes;
3269 }
3270 }
3271 if ((result != ZFCP_ERP_SUCCEEDED) && port->rport) {
3272 fc_remote_port_delete(port->rport);
3273 port->rport = NULL;
3423 } 3274 }
3424 zfcp_port_put(port); 3275 zfcp_port_put(port);
3425 break; 3276 break;
3426 case ZFCP_ERP_ACTION_REOPEN_ADAPTER: 3277 case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
3278 if (result != ZFCP_ERP_SUCCEEDED) {
3279 struct zfcp_port *port;
3280 list_for_each_entry(port, &adapter->port_list_head, list)
3281 if (port->rport &&
3282 !atomic_test_mask(ZFCP_STATUS_PORT_WKA,
3283 &port->status)) {
3284 fc_remote_port_delete(port->rport);
3285 port->rport = NULL;
3286 }
3287 }
3427 zfcp_adapter_put(adapter); 3288 zfcp_adapter_put(adapter);
3428 break; 3289 break;
3429 default: 3290 default:
@@ -3432,13 +3293,6 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3432} 3293}
3433 3294
3434 3295
3435/*
3436 * function:
3437 *
3438 * purpose:
3439 *
3440 * returns: FIXME
3441 */
3442static int 3296static int
3443zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter) 3297zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
3444{ 3298{
@@ -3455,13 +3309,6 @@ zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
3455 return retval; 3309 return retval;
3456} 3310}
3457 3311
3458/*
3459 * function:
3460 *
3461 * purpose:
3462 *
3463 * returns: FIXME
3464 */
3465static int 3312static int
3466zfcp_erp_action_dismiss_port(struct zfcp_port *port) 3313zfcp_erp_action_dismiss_port(struct zfcp_port *port)
3467{ 3314{
@@ -3480,13 +3327,6 @@ zfcp_erp_action_dismiss_port(struct zfcp_port *port)
3480 return retval; 3327 return retval;
3481} 3328}
3482 3329
3483/*
3484 * function:
3485 *
3486 * purpose:
3487 *
3488 * returns: FIXME
3489 */
3490static int 3330static int
3491zfcp_erp_action_dismiss_unit(struct zfcp_unit *unit) 3331zfcp_erp_action_dismiss_unit(struct zfcp_unit *unit)
3492{ 3332{
@@ -3501,13 +3341,6 @@ zfcp_erp_action_dismiss_unit(struct zfcp_unit *unit)
3501 return retval; 3341 return retval;
3502} 3342}
3503 3343
3504/*
3505 * function:
3506 *
3507 * purpose: moves erp_action to 'erp running list'
3508 *
3509 * returns:
3510 */
3511static inline void 3344static inline void
3512zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action) 3345zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
3513{ 3346{
@@ -3518,13 +3351,6 @@ zfcp_erp_action_to_running(struct zfcp_erp_action *erp_action)
3518 list_move(&erp_action->list, &erp_action->adapter->erp_running_head); 3351 list_move(&erp_action->list, &erp_action->adapter->erp_running_head);
3519} 3352}
3520 3353
3521/*
3522 * function:
3523 *
3524 * purpose: moves erp_action to 'erp ready list'
3525 *
3526 * returns:
3527 */
3528static inline void 3354static inline void
3529zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action) 3355zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action)
3530{ 3356{
@@ -3535,11 +3361,6 @@ zfcp_erp_action_to_ready(struct zfcp_erp_action *erp_action)
3535 list_move(&erp_action->list, &erp_action->adapter->erp_ready_head); 3361 list_move(&erp_action->list, &erp_action->adapter->erp_ready_head);
3536} 3362}
3537 3363
3538/*
3539 * function: zfcp_erp_port_boxed
3540 *
3541 * purpose:
3542 */
3543void 3364void
3544zfcp_erp_port_boxed(struct zfcp_port *port) 3365zfcp_erp_port_boxed(struct zfcp_port *port)
3545{ 3366{
@@ -3556,11 +3377,6 @@ zfcp_erp_port_boxed(struct zfcp_port *port)
3556 zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED); 3377 zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED);
3557} 3378}
3558 3379
3559/*
3560 * function: zfcp_erp_unit_boxed
3561 *
3562 * purpose:
3563 */
3564void 3380void
3565zfcp_erp_unit_boxed(struct zfcp_unit *unit) 3381zfcp_erp_unit_boxed(struct zfcp_unit *unit)
3566{ 3382{
@@ -3574,11 +3390,6 @@ zfcp_erp_unit_boxed(struct zfcp_unit *unit)
3574 zfcp_erp_unit_reopen(unit, ZFCP_STATUS_COMMON_ERP_FAILED); 3390 zfcp_erp_unit_reopen(unit, ZFCP_STATUS_COMMON_ERP_FAILED);
3575} 3391}
3576 3392
3577/*
3578 * function: zfcp_erp_port_access_denied
3579 *
3580 * purpose:
3581 */
3582void 3393void
3583zfcp_erp_port_access_denied(struct zfcp_port *port) 3394zfcp_erp_port_access_denied(struct zfcp_port *port)
3584{ 3395{
@@ -3595,11 +3406,6 @@ zfcp_erp_port_access_denied(struct zfcp_port *port)
3595 read_unlock_irqrestore(&zfcp_data.config_lock, flags); 3406 read_unlock_irqrestore(&zfcp_data.config_lock, flags);
3596} 3407}
3597 3408
3598/*
3599 * function: zfcp_erp_unit_access_denied
3600 *
3601 * purpose:
3602 */
3603void 3409void
3604zfcp_erp_unit_access_denied(struct zfcp_unit *unit) 3410zfcp_erp_unit_access_denied(struct zfcp_unit *unit)
3605{ 3411{
@@ -3613,11 +3419,6 @@ zfcp_erp_unit_access_denied(struct zfcp_unit *unit)
3613 ZFCP_SET); 3419 ZFCP_SET);
3614} 3420}
3615 3421
3616/*
3617 * function: zfcp_erp_adapter_access_changed
3618 *
3619 * purpose:
3620 */
3621void 3422void
3622zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter) 3423zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter)
3623{ 3424{
@@ -3628,7 +3429,7 @@ zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter)
3628 return; 3429 return;
3629 3430
3630 debug_text_event(adapter->erp_dbf, 3, "a_access_recover"); 3431 debug_text_event(adapter->erp_dbf, 3, "a_access_recover");
3631 debug_event(adapter->erp_dbf, 3, &adapter->name, 8); 3432 debug_event(adapter->erp_dbf, 3, zfcp_get_busid_by_adapter(adapter), 8);
3632 3433
3633 read_lock_irqsave(&zfcp_data.config_lock, flags); 3434 read_lock_irqsave(&zfcp_data.config_lock, flags);
3634 if (adapter->nameserver_port) 3435 if (adapter->nameserver_port)
@@ -3639,11 +3440,6 @@ zfcp_erp_adapter_access_changed(struct zfcp_adapter *adapter)
3639 read_unlock_irqrestore(&zfcp_data.config_lock, flags); 3440 read_unlock_irqrestore(&zfcp_data.config_lock, flags);
3640} 3441}
3641 3442
3642/*
3643 * function: zfcp_erp_port_access_changed
3644 *
3645 * purpose:
3646 */
3647void 3443void
3648zfcp_erp_port_access_changed(struct zfcp_port *port) 3444zfcp_erp_port_access_changed(struct zfcp_port *port)
3649{ 3445{
@@ -3672,11 +3468,6 @@ zfcp_erp_port_access_changed(struct zfcp_port *port)
3672 zfcp_get_busid_by_adapter(adapter), port->wwpn); 3468 zfcp_get_busid_by_adapter(adapter), port->wwpn);
3673} 3469}
3674 3470
3675/*
3676 * function: zfcp_erp_unit_access_changed
3677 *
3678 * purpose:
3679 */
3680void 3471void
3681zfcp_erp_unit_access_changed(struct zfcp_unit *unit) 3472zfcp_erp_unit_access_changed(struct zfcp_unit *unit)
3682{ 3473{