diff options
author | James Smart <James.Smart@Emulex.Com> | 2006-12-02 13:33:57 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-12-03 10:28:43 -0500 |
commit | 2fb9bd8b9cbe9a8d70bf5f43a9ee6a4fa565ed5a (patch) | |
tree | b16c87c100f7645f3872213f8e1203505dcbc4de /drivers/scsi | |
parent | 0e5d030bef4de3e35bcca35dd9465e6672128570 (diff) |
[SCSI] lpfc 8.1.11 : Discovery Fixes
Discovery Fixes:
- Prevent starting discovery of a node if discovery is in progress.
- Code improvement (reduction) for lpfc_findnode_did().
- Update discovery to send RFF to Fabric on link up
- Bypass unique WWN checks for fabric addresses
- Add ndlp to plogi list prior to issuing the plogi els command
Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_ct.c | 24 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 7 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hbadisc.c | 197 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hw.h | 16 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_nportdisc.c | 4 |
5 files changed, 73 insertions, 175 deletions
diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c index 3add7c237859..a51a41b7f15d 100644 --- a/drivers/scsi/lpfc/lpfc_ct.c +++ b/drivers/scsi/lpfc/lpfc_ct.c | |||
@@ -558,6 +558,14 @@ lpfc_cmpl_ct_cmd_rsnn_nn(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb, | |||
558 | return; | 558 | return; |
559 | } | 559 | } |
560 | 560 | ||
561 | static void | ||
562 | lpfc_cmpl_ct_cmd_rff_id(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb, | ||
563 | struct lpfc_iocbq * rspiocb) | ||
564 | { | ||
565 | lpfc_cmpl_ct_cmd_rft_id(phba, cmdiocb, rspiocb); | ||
566 | return; | ||
567 | } | ||
568 | |||
561 | void | 569 | void |
562 | lpfc_get_hba_sym_node_name(struct lpfc_hba * phba, uint8_t * symbp) | 570 | lpfc_get_hba_sym_node_name(struct lpfc_hba * phba, uint8_t * symbp) |
563 | { | 571 | { |
@@ -629,6 +637,8 @@ lpfc_ns_cmd(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp, int cmdcode) | |||
629 | bpl->tus.f.bdeSize = RNN_REQUEST_SZ; | 637 | bpl->tus.f.bdeSize = RNN_REQUEST_SZ; |
630 | else if (cmdcode == SLI_CTNS_RSNN_NN) | 638 | else if (cmdcode == SLI_CTNS_RSNN_NN) |
631 | bpl->tus.f.bdeSize = RSNN_REQUEST_SZ; | 639 | bpl->tus.f.bdeSize = RSNN_REQUEST_SZ; |
640 | else if (cmdcode == SLI_CTNS_RFF_ID) | ||
641 | bpl->tus.f.bdeSize = RFF_REQUEST_SZ; | ||
632 | else | 642 | else |
633 | bpl->tus.f.bdeSize = 0; | 643 | bpl->tus.f.bdeSize = 0; |
634 | bpl->tus.w = le32_to_cpu(bpl->tus.w); | 644 | bpl->tus.w = le32_to_cpu(bpl->tus.w); |
@@ -660,6 +670,17 @@ lpfc_ns_cmd(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp, int cmdcode) | |||
660 | cmpl = lpfc_cmpl_ct_cmd_rft_id; | 670 | cmpl = lpfc_cmpl_ct_cmd_rft_id; |
661 | break; | 671 | break; |
662 | 672 | ||
673 | case SLI_CTNS_RFF_ID: | ||
674 | CtReq->CommandResponse.bits.CmdRsp = | ||
675 | be16_to_cpu(SLI_CTNS_RFF_ID); | ||
676 | CtReq->un.rff.PortId = be32_to_cpu(phba->fc_myDID); | ||
677 | CtReq->un.rff.feature_res = 0; | ||
678 | CtReq->un.rff.feature_tgt = 0; | ||
679 | CtReq->un.rff.type_code = FC_FCP_DATA; | ||
680 | CtReq->un.rff.feature_init = 1; | ||
681 | cmpl = lpfc_cmpl_ct_cmd_rff_id; | ||
682 | break; | ||
683 | |||
663 | case SLI_CTNS_RNN_ID: | 684 | case SLI_CTNS_RNN_ID: |
664 | CtReq->CommandResponse.bits.CmdRsp = | 685 | CtReq->CommandResponse.bits.CmdRsp = |
665 | be16_to_cpu(SLI_CTNS_RNN_ID); | 686 | be16_to_cpu(SLI_CTNS_RNN_ID); |
@@ -934,7 +955,8 @@ lpfc_fdmi_cmd(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp, int cmdcode) | |||
934 | ae = (ATTRIBUTE_ENTRY *) ((uint8_t *) rh + size); | 955 | ae = (ATTRIBUTE_ENTRY *) ((uint8_t *) rh + size); |
935 | ae->ad.bits.AttrType = be16_to_cpu(OS_NAME_VERSION); | 956 | ae->ad.bits.AttrType = be16_to_cpu(OS_NAME_VERSION); |
936 | sprintf(ae->un.OsNameVersion, "%s %s %s", | 957 | sprintf(ae->un.OsNameVersion, "%s %s %s", |
937 | init_utsname()->sysname, init_utsname()->release, | 958 | init_utsname()->sysname, |
959 | init_utsname()->release, | ||
938 | init_utsname()->version); | 960 | init_utsname()->version); |
939 | len = strlen(ae->un.OsNameVersion); | 961 | len = strlen(ae->un.OsNameVersion); |
940 | len += (len & 3) ? (4 - (len & 3)) : 4; | 962 | len += (len & 3) ? (4 - (len & 3)) : 4; |
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index 71864cdc6c71..60af1c60fe9b 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
@@ -657,6 +657,12 @@ lpfc_plogi_confirm_nport(struct lpfc_hba * phba, struct lpfc_dmabuf *prsp, | |||
657 | uint8_t name[sizeof (struct lpfc_name)]; | 657 | uint8_t name[sizeof (struct lpfc_name)]; |
658 | uint32_t rc; | 658 | uint32_t rc; |
659 | 659 | ||
660 | /* Fabric nodes can have the same WWPN so we don't bother searching | ||
661 | * by WWPN. Just return the ndlp that was given to us. | ||
662 | */ | ||
663 | if (ndlp->nlp_type & NLP_FABRIC) | ||
664 | return ndlp; | ||
665 | |||
660 | lp = (uint32_t *) prsp->virt; | 666 | lp = (uint32_t *) prsp->virt; |
661 | sp = (struct serv_parm *) ((uint8_t *) lp + sizeof (uint32_t)); | 667 | sp = (struct serv_parm *) ((uint8_t *) lp + sizeof (uint32_t)); |
662 | memset(name, 0, sizeof (struct lpfc_name)); | 668 | memset(name, 0, sizeof (struct lpfc_name)); |
@@ -2644,6 +2650,7 @@ lpfc_els_handle_rscn(struct lpfc_hba * phba) | |||
2644 | ndlp->nlp_type |= NLP_FABRIC; | 2650 | ndlp->nlp_type |= NLP_FABRIC; |
2645 | ndlp->nlp_prev_state = ndlp->nlp_state; | 2651 | ndlp->nlp_prev_state = ndlp->nlp_state; |
2646 | ndlp->nlp_state = NLP_STE_PLOGI_ISSUE; | 2652 | ndlp->nlp_state = NLP_STE_PLOGI_ISSUE; |
2653 | lpfc_nlp_list(phba, ndlp, NLP_PLOGI_LIST); | ||
2647 | lpfc_issue_els_plogi(phba, NameServer_DID, 0); | 2654 | lpfc_issue_els_plogi(phba, NameServer_DID, 0); |
2648 | /* Wait for NameServer login cmpl before we can | 2655 | /* Wait for NameServer login cmpl before we can |
2649 | continue */ | 2656 | continue */ |
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 19c79a0549a7..983faadec5f3 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c | |||
@@ -1067,6 +1067,7 @@ lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb) | |||
1067 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RNN_ID); | 1067 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RNN_ID); |
1068 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RSNN_NN); | 1068 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RSNN_NN); |
1069 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RFT_ID); | 1069 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RFT_ID); |
1070 | lpfc_ns_cmd(phba, ndlp, SLI_CTNS_RFF_ID); | ||
1070 | } | 1071 | } |
1071 | 1072 | ||
1072 | phba->fc_ns_retry = 0; | 1073 | phba->fc_ns_retry = 0; |
@@ -1680,112 +1681,38 @@ lpfc_matchdid(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp, uint32_t did) | |||
1680 | struct lpfc_nodelist * | 1681 | struct lpfc_nodelist * |
1681 | lpfc_findnode_did(struct lpfc_hba * phba, uint32_t order, uint32_t did) | 1682 | lpfc_findnode_did(struct lpfc_hba * phba, uint32_t order, uint32_t did) |
1682 | { | 1683 | { |
1683 | struct lpfc_nodelist *ndlp, *next_ndlp; | 1684 | struct lpfc_nodelist *ndlp; |
1685 | struct list_head *lists[]={&phba->fc_nlpunmap_list, | ||
1686 | &phba->fc_nlpmap_list, | ||
1687 | &phba->fc_plogi_list, | ||
1688 | &phba->fc_adisc_list, | ||
1689 | &phba->fc_reglogin_list, | ||
1690 | &phba->fc_prli_list, | ||
1691 | &phba->fc_npr_list, | ||
1692 | &phba->fc_unused_list}; | ||
1693 | uint32_t search[]={NLP_SEARCH_UNMAPPED, | ||
1694 | NLP_SEARCH_MAPPED, | ||
1695 | NLP_SEARCH_PLOGI, | ||
1696 | NLP_SEARCH_ADISC, | ||
1697 | NLP_SEARCH_REGLOGIN, | ||
1698 | NLP_SEARCH_PRLI, | ||
1699 | NLP_SEARCH_NPR, | ||
1700 | NLP_SEARCH_UNUSED}; | ||
1701 | int i; | ||
1684 | uint32_t data1; | 1702 | uint32_t data1; |
1685 | 1703 | ||
1686 | spin_lock_irq(phba->host->host_lock); | 1704 | spin_lock_irq(phba->host->host_lock); |
1687 | if (order & NLP_SEARCH_UNMAPPED) { | 1705 | for (i = 0; i < ARRAY_SIZE(lists); i++ ) { |
1688 | list_for_each_entry_safe(ndlp, next_ndlp, | 1706 | if (!(order & search[i])) |
1689 | &phba->fc_nlpunmap_list, nlp_listp) { | 1707 | continue; |
1690 | if (lpfc_matchdid(phba, ndlp, did)) { | 1708 | list_for_each_entry(ndlp, lists[i], nlp_listp) { |
1691 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1692 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1693 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1694 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1695 | /* FIND node DID unmapped */ | ||
1696 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1697 | "%d:0929 FIND node DID unmapped" | ||
1698 | " Data: x%p x%x x%x x%x\n", | ||
1699 | phba->brd_no, | ||
1700 | ndlp, ndlp->nlp_DID, | ||
1701 | ndlp->nlp_flag, data1); | ||
1702 | spin_unlock_irq(phba->host->host_lock); | ||
1703 | return ndlp; | ||
1704 | } | ||
1705 | } | ||
1706 | } | ||
1707 | |||
1708 | if (order & NLP_SEARCH_MAPPED) { | ||
1709 | list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_nlpmap_list, | ||
1710 | nlp_listp) { | ||
1711 | if (lpfc_matchdid(phba, ndlp, did)) { | ||
1712 | |||
1713 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1714 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1715 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1716 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1717 | /* FIND node DID mapped */ | ||
1718 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1719 | "%d:0930 FIND node DID mapped " | ||
1720 | "Data: x%p x%x x%x x%x\n", | ||
1721 | phba->brd_no, | ||
1722 | ndlp, ndlp->nlp_DID, | ||
1723 | ndlp->nlp_flag, data1); | ||
1724 | spin_unlock_irq(phba->host->host_lock); | ||
1725 | return ndlp; | ||
1726 | } | ||
1727 | } | ||
1728 | } | ||
1729 | |||
1730 | if (order & NLP_SEARCH_PLOGI) { | ||
1731 | list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_plogi_list, | ||
1732 | nlp_listp) { | ||
1733 | if (lpfc_matchdid(phba, ndlp, did)) { | ||
1734 | |||
1735 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1736 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1737 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1738 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1739 | /* LOG change to PLOGI */ | ||
1740 | /* FIND node DID plogi */ | ||
1741 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1742 | "%d:0908 FIND node DID plogi " | ||
1743 | "Data: x%p x%x x%x x%x\n", | ||
1744 | phba->brd_no, | ||
1745 | ndlp, ndlp->nlp_DID, | ||
1746 | ndlp->nlp_flag, data1); | ||
1747 | spin_unlock_irq(phba->host->host_lock); | ||
1748 | return ndlp; | ||
1749 | } | ||
1750 | } | ||
1751 | } | ||
1752 | |||
1753 | if (order & NLP_SEARCH_ADISC) { | ||
1754 | list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_adisc_list, | ||
1755 | nlp_listp) { | ||
1756 | if (lpfc_matchdid(phba, ndlp, did)) { | ||
1757 | |||
1758 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1759 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1760 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1761 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1762 | /* LOG change to ADISC */ | ||
1763 | /* FIND node DID adisc */ | ||
1764 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1765 | "%d:0931 FIND node DID adisc " | ||
1766 | "Data: x%p x%x x%x x%x\n", | ||
1767 | phba->brd_no, | ||
1768 | ndlp, ndlp->nlp_DID, | ||
1769 | ndlp->nlp_flag, data1); | ||
1770 | spin_unlock_irq(phba->host->host_lock); | ||
1771 | return ndlp; | ||
1772 | } | ||
1773 | } | ||
1774 | } | ||
1775 | |||
1776 | if (order & NLP_SEARCH_REGLOGIN) { | ||
1777 | list_for_each_entry_safe(ndlp, next_ndlp, | ||
1778 | &phba->fc_reglogin_list, nlp_listp) { | ||
1779 | if (lpfc_matchdid(phba, ndlp, did)) { | 1709 | if (lpfc_matchdid(phba, ndlp, did)) { |
1780 | |||
1781 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | 1710 | data1 = (((uint32_t) ndlp->nlp_state << 24) | |
1782 | ((uint32_t) ndlp->nlp_xri << 16) | | 1711 | ((uint32_t) ndlp->nlp_xri << 16) | |
1783 | ((uint32_t) ndlp->nlp_type << 8) | | 1712 | ((uint32_t) ndlp->nlp_type << 8) | |
1784 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | 1713 | ((uint32_t) ndlp->nlp_rpi & 0xff)); |
1785 | /* LOG change to REGLOGIN */ | ||
1786 | /* FIND node DID reglogin */ | ||
1787 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | 1714 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, |
1788 | "%d:0901 FIND node DID reglogin" | 1715 | "%d:0929 FIND node DID " |
1789 | " Data: x%p x%x x%x x%x\n", | 1716 | " Data: x%p x%x x%x x%x\n", |
1790 | phba->brd_no, | 1717 | phba->brd_no, |
1791 | ndlp, ndlp->nlp_DID, | 1718 | ndlp, ndlp->nlp_DID, |
@@ -1795,86 +1722,12 @@ lpfc_findnode_did(struct lpfc_hba * phba, uint32_t order, uint32_t did) | |||
1795 | } | 1722 | } |
1796 | } | 1723 | } |
1797 | } | 1724 | } |
1798 | |||
1799 | if (order & NLP_SEARCH_PRLI) { | ||
1800 | list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_prli_list, | ||
1801 | nlp_listp) { | ||
1802 | if (lpfc_matchdid(phba, ndlp, did)) { | ||
1803 | |||
1804 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1805 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1806 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1807 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1808 | /* LOG change to PRLI */ | ||
1809 | /* FIND node DID prli */ | ||
1810 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1811 | "%d:0902 FIND node DID prli " | ||
1812 | "Data: x%p x%x x%x x%x\n", | ||
1813 | phba->brd_no, | ||
1814 | ndlp, ndlp->nlp_DID, | ||
1815 | ndlp->nlp_flag, data1); | ||
1816 | spin_unlock_irq(phba->host->host_lock); | ||
1817 | return ndlp; | ||
1818 | } | ||
1819 | } | ||
1820 | } | ||
1821 | |||
1822 | if (order & NLP_SEARCH_NPR) { | ||
1823 | list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_npr_list, | ||
1824 | nlp_listp) { | ||
1825 | if (lpfc_matchdid(phba, ndlp, did)) { | ||
1826 | |||
1827 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1828 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1829 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1830 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1831 | /* LOG change to NPR */ | ||
1832 | /* FIND node DID npr */ | ||
1833 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1834 | "%d:0903 FIND node DID npr " | ||
1835 | "Data: x%p x%x x%x x%x\n", | ||
1836 | phba->brd_no, | ||
1837 | ndlp, ndlp->nlp_DID, | ||
1838 | ndlp->nlp_flag, data1); | ||
1839 | spin_unlock_irq(phba->host->host_lock); | ||
1840 | return ndlp; | ||
1841 | } | ||
1842 | } | ||
1843 | } | ||
1844 | |||
1845 | if (order & NLP_SEARCH_UNUSED) { | ||
1846 | list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_adisc_list, | ||
1847 | nlp_listp) { | ||
1848 | if (lpfc_matchdid(phba, ndlp, did)) { | ||
1849 | |||
1850 | data1 = (((uint32_t) ndlp->nlp_state << 24) | | ||
1851 | ((uint32_t) ndlp->nlp_xri << 16) | | ||
1852 | ((uint32_t) ndlp->nlp_type << 8) | | ||
1853 | ((uint32_t) ndlp->nlp_rpi & 0xff)); | ||
1854 | /* LOG change to UNUSED */ | ||
1855 | /* FIND node DID unused */ | ||
1856 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, | ||
1857 | "%d:0905 FIND node DID unused " | ||
1858 | "Data: x%p x%x x%x x%x\n", | ||
1859 | phba->brd_no, | ||
1860 | ndlp, ndlp->nlp_DID, | ||
1861 | ndlp->nlp_flag, data1); | ||
1862 | spin_unlock_irq(phba->host->host_lock); | ||
1863 | return ndlp; | ||
1864 | } | ||
1865 | } | ||
1866 | } | ||
1867 | |||
1868 | spin_unlock_irq(phba->host->host_lock); | 1725 | spin_unlock_irq(phba->host->host_lock); |
1869 | 1726 | ||
1870 | /* FIND node did <did> NOT FOUND */ | 1727 | /* FIND node did <did> NOT FOUND */ |
1871 | lpfc_printf_log(phba, | 1728 | lpfc_printf_log(phba, KERN_INFO, LOG_NODE, |
1872 | KERN_INFO, | ||
1873 | LOG_NODE, | ||
1874 | "%d:0932 FIND node did x%x NOT FOUND Data: x%x\n", | 1729 | "%d:0932 FIND node did x%x NOT FOUND Data: x%x\n", |
1875 | phba->brd_no, did, order); | 1730 | phba->brd_no, did, order); |
1876 | |||
1877 | /* no match found */ | ||
1878 | return NULL; | 1731 | return NULL; |
1879 | } | 1732 | } |
1880 | 1733 | ||
diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h index eedf98801366..d7306679f1f9 100644 --- a/drivers/scsi/lpfc/lpfc_hw.h +++ b/drivers/scsi/lpfc/lpfc_hw.h | |||
@@ -121,6 +121,20 @@ struct lpfc_sli_ct_request { | |||
121 | 121 | ||
122 | uint32_t rsvd[7]; | 122 | uint32_t rsvd[7]; |
123 | } rft; | 123 | } rft; |
124 | struct rff { | ||
125 | uint32_t PortId; | ||
126 | uint8_t reserved[2]; | ||
127 | #ifdef __BIG_ENDIAN_BITFIELD | ||
128 | uint8_t feature_res:6; | ||
129 | uint8_t feature_init:1; | ||
130 | uint8_t feature_tgt:1; | ||
131 | #else /* __LITTLE_ENDIAN_BITFIELD */ | ||
132 | uint8_t feature_tgt:1; | ||
133 | uint8_t feature_init:1; | ||
134 | uint8_t feature_res:6; | ||
135 | #endif | ||
136 | uint8_t type_code; /* type=8 for FCP */ | ||
137 | } rff; | ||
124 | struct rnn { | 138 | struct rnn { |
125 | uint32_t PortId; /* For RNN_ID requests */ | 139 | uint32_t PortId; /* For RNN_ID requests */ |
126 | uint8_t wwnn[8]; | 140 | uint8_t wwnn[8]; |
@@ -136,6 +150,7 @@ struct lpfc_sli_ct_request { | |||
136 | #define SLI_CT_REVISION 1 | 150 | #define SLI_CT_REVISION 1 |
137 | #define GID_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 260) | 151 | #define GID_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 260) |
138 | #define RFT_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 228) | 152 | #define RFT_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 228) |
153 | #define RFF_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 235) | ||
139 | #define RNN_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 252) | 154 | #define RNN_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request) - 252) |
140 | #define RSNN_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request)) | 155 | #define RSNN_REQUEST_SZ (sizeof(struct lpfc_sli_ct_request)) |
141 | 156 | ||
@@ -225,6 +240,7 @@ struct lpfc_sli_ct_request { | |||
225 | #define SLI_CTNS_RNN_ID 0x0213 | 240 | #define SLI_CTNS_RNN_ID 0x0213 |
226 | #define SLI_CTNS_RCS_ID 0x0214 | 241 | #define SLI_CTNS_RCS_ID 0x0214 |
227 | #define SLI_CTNS_RFT_ID 0x0217 | 242 | #define SLI_CTNS_RFT_ID 0x0217 |
243 | #define SLI_CTNS_RFF_ID 0x021F | ||
228 | #define SLI_CTNS_RSPN_ID 0x0218 | 244 | #define SLI_CTNS_RSPN_ID 0x0218 |
229 | #define SLI_CTNS_RPT_ID 0x021A | 245 | #define SLI_CTNS_RPT_ID 0x021A |
230 | #define SLI_CTNS_RIP_NN 0x0235 | 246 | #define SLI_CTNS_RIP_NN 0x0235 |
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c index d5f415007db2..958c330ecaad 100644 --- a/drivers/scsi/lpfc/lpfc_nportdisc.c +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c | |||
@@ -1620,8 +1620,8 @@ lpfc_rcv_padisc_npr_node(struct lpfc_hba * phba, | |||
1620 | * or discovery in progress for this node. Starting discovery | 1620 | * or discovery in progress for this node. Starting discovery |
1621 | * here will affect the counting of discovery threads. | 1621 | * here will affect the counting of discovery threads. |
1622 | */ | 1622 | */ |
1623 | if ((!(ndlp->nlp_flag & NLP_DELAY_TMO)) && | 1623 | if (!(ndlp->nlp_flag & NLP_DELAY_TMO) && |
1624 | (ndlp->nlp_flag & NLP_NPR_2B_DISC)){ | 1624 | !(ndlp->nlp_flag & NLP_NPR_2B_DISC)){ |
1625 | if (ndlp->nlp_flag & NLP_NPR_ADISC) { | 1625 | if (ndlp->nlp_flag & NLP_NPR_ADISC) { |
1626 | ndlp->nlp_prev_state = NLP_STE_NPR_NODE; | 1626 | ndlp->nlp_prev_state = NLP_STE_NPR_NODE; |
1627 | ndlp->nlp_state = NLP_STE_ADISC_ISSUE; | 1627 | ndlp->nlp_state = NLP_STE_ADISC_ISSUE; |