[SCSI] zfcp: fix link down handling during firmware update

Don't check link down payload in case of firmware update.

Signed-off-by: Maxim Shchetynin <maxim@de.ibm.com>
Signed-off-by: Andreas Herrmann <aherrman@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by Maxim Shchetynin and committed by James Bottomley ee69ab7a 2448c459

+31 -19
+31 -19
drivers/s390/scsi/zfcp_fsf.c
··· 554 554 zfcp_fsf_link_down_info_eval(struct zfcp_adapter *adapter, 555 555 struct fsf_link_down_info *link_down) 556 556 { 557 + if (atomic_test_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, 558 + &adapter->status)) 559 + return; 560 + 561 + atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status); 562 + 563 + if (link_down == NULL) { 564 + zfcp_erp_adapter_reopen(adapter, 0); 565 + return; 566 + } 567 + 557 568 switch (link_down->error_code) { 558 569 case FSF_PSQ_LINK_NO_LIGHT: 559 570 ZFCP_LOG_NORMAL("The local link to adapter %s is down " ··· 645 634 link_down->explanation_code, 646 635 link_down->vendor_specific_code); 647 636 648 - if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, 649 - &adapter->status)) { 650 - atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, 651 - &adapter->status); 652 - switch (link_down->error_code) { 653 - case FSF_PSQ_LINK_NO_LIGHT: 654 - case FSF_PSQ_LINK_WRAP_PLUG: 655 - case FSF_PSQ_LINK_NO_FCP: 656 - case FSF_PSQ_LINK_FIRMWARE_UPDATE: 657 - zfcp_erp_adapter_reopen(adapter, 0); 658 - break; 659 - default: 660 - zfcp_erp_adapter_failed(adapter); 661 - } 637 + switch (link_down->error_code) { 638 + case FSF_PSQ_LINK_NO_LIGHT: 639 + case FSF_PSQ_LINK_WRAP_PLUG: 640 + case FSF_PSQ_LINK_NO_FCP: 641 + case FSF_PSQ_LINK_FIRMWARE_UPDATE: 642 + zfcp_erp_adapter_reopen(adapter, 0); 643 + break; 644 + default: 645 + zfcp_erp_adapter_failed(adapter); 662 646 } 663 647 } 664 648 ··· 925 919 case FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK: 926 920 ZFCP_LOG_INFO("Physical link to adapter %s is down\n", 927 921 zfcp_get_busid_by_adapter(adapter)); 922 + zfcp_fsf_link_down_info_eval(adapter, 923 + (struct fsf_link_down_info *) 924 + &status_buffer->payload); 928 925 break; 929 926 case FSF_STATUS_READ_SUB_FDISC_FAILED: 930 927 ZFCP_LOG_INFO("Local link to adapter %s is down " 931 928 "due to failed FDISC login\n", 932 - zfcp_get_busid_by_adapter(adapter)); 929 + zfcp_get_busid_by_adapter(adapter)); 930 + zfcp_fsf_link_down_info_eval(adapter, 931 + (struct fsf_link_down_info *) 932 + &status_buffer->payload); 933 933 break; 934 934 case FSF_STATUS_READ_SUB_FIRMWARE_UPDATE: 935 935 ZFCP_LOG_INFO("Local link to adapter %s is down " 936 936 "due to firmware update on adapter\n", 937 937 zfcp_get_busid_by_adapter(adapter)); 938 + zfcp_fsf_link_down_info_eval(adapter, NULL); 938 939 break; 939 940 default: 940 941 ZFCP_LOG_INFO("Local link to adapter %s is down " 941 942 "due to unknown reason\n", 942 943 zfcp_get_busid_by_adapter(adapter)); 944 + zfcp_fsf_link_down_info_eval(adapter, NULL); 943 945 }; 944 - zfcp_fsf_link_down_info_eval(adapter, 945 - (struct fsf_link_down_info *) &status_buffer->payload); 946 946 break; 947 947 948 948 case FSF_STATUS_READ_LINK_UP: 949 949 ZFCP_LOG_NORMAL("Local link to adapter %s was replugged. " 950 - "Restarting operations on this adapter\n", 951 - zfcp_get_busid_by_adapter(adapter)); 950 + "Restarting operations on this adapter\n", 951 + zfcp_get_busid_by_adapter(adapter)); 952 952 /* All ports should be marked as ready to run again */ 953 953 zfcp_erp_modify_adapter_status(adapter, 954 954 ZFCP_STATUS_COMMON_RUNNING,