diff mbox series

lpfc: Remove failing soft_wwn support

Message ID 20220310154845.11125-1-jsmart2021@gmail.com (mailing list archive)
State Accepted
Headers show
Series lpfc: Remove failing soft_wwn support | expand

Commit Message

James Smart March 10, 2022, 3:48 p.m. UTC
The soft_wwpn/soft_wwn functionality, which allows the driver to modify
service parameters in an attempt to override the adapter-assigned WWN,
was originally attempted to be removed roughly 6 yrs ago as new fabric
features were being introduced that clashed with the implementation.
In the end, the feature was left in with the user being responsible if
things went south.

We've reached a point where soft_wwn is no longer functional and is
failing in almost all production use cases. Use of Fabric features such
as Fabric Assigned WWPN and Automatic DPORT is now prevalent and the
features require coordination between the adapter and driver that can't
be solved by the simplistic update of the service parameters. As it is
no longer functional, the feature is to be removed.

There are still ways to override the adapter-assigned WWN but they
require the admin to invoke bios/efi level menus.

Co-developed-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc.h      |   3 -
 drivers/scsi/lpfc/lpfc_attr.c | 228 ----------------------------------
 drivers/scsi/lpfc/lpfc_init.c |  12 +-
 3 files changed, 1 insertion(+), 242 deletions(-)

Comments

Himanshu Madhani March 10, 2022, 8:13 p.m. UTC | #1
> On Mar 10, 2022, at 7:48 AM, James Smart <jsmart2021@gmail.com> wrote:
> 
> The soft_wwpn/soft_wwn functionality, which allows the driver to modify
> service parameters in an attempt to override the adapter-assigned WWN,
> was originally attempted to be removed roughly 6 yrs ago as new fabric
> features were being introduced that clashed with the implementation.
> In the end, the feature was left in with the user being responsible if
> things went south.
> 
> We've reached a point where soft_wwn is no longer functional and is
> failing in almost all production use cases. Use of Fabric features such
> as Fabric Assigned WWPN and Automatic DPORT is now prevalent and the
> features require coordination between the adapter and driver that can't
> be solved by the simplistic update of the service parameters. As it is
> no longer functional, the feature is to be removed.
> 
> There are still ways to override the adapter-assigned WWN but they
> require the admin to invoke bios/efi level menus.
> 
> Co-developed-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <jsmart2021@gmail.com>
> ---
> drivers/scsi/lpfc/lpfc.h      |   3 -
> drivers/scsi/lpfc/lpfc_attr.c | 228 ----------------------------------
> drivers/scsi/lpfc/lpfc_init.c |  12 +-
> 3 files changed, 1 insertion(+), 242 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
> index 8197ba8d401d..86653aa9b389 100644
> --- a/drivers/scsi/lpfc/lpfc.h
> +++ b/drivers/scsi/lpfc/lpfc.h
> @@ -1153,8 +1153,6 @@ struct lpfc_hba {
> 	uint32_t cfg_nvme_seg_cnt;
> 	uint32_t cfg_scsi_seg_cnt;
> 	uint32_t cfg_sg_dma_buf_size;
> -	uint64_t cfg_soft_wwnn;
> -	uint64_t cfg_soft_wwpn;
> 	uint32_t cfg_hba_queue_depth;
> 	uint32_t cfg_enable_hba_reset;
> 	uint32_t cfg_enable_hba_heartbeat;
> @@ -1286,7 +1284,6 @@ struct lpfc_hba {
> #define VPD_PORT            0x8         /* valid vpd port data */
> #define VPD_MASK            0xf         /* mask for any vpd data */
> 
> -	uint8_t soft_wwn_enable;
> 
> 	struct timer_list fcp_poll_timer;
> 	struct timer_list eratt_poll;
> diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
> index bac78fbce8d6..ff99f7cdbefa 100644
> --- a/drivers/scsi/lpfc/lpfc_attr.c
> +++ b/drivers/scsi/lpfc/lpfc_attr.c
> @@ -2835,7 +2835,6 @@ static DEVICE_ATTR(lpfc_xlane_supported, S_IRUGO, lpfc_oas_supported_show,
> 		   NULL);
> static DEVICE_ATTR(cmf_info, 0444, lpfc_cmf_info_show, NULL);
> 
> -static char *lpfc_soft_wwn_key = "C99G71SL8032A";
> #define WWN_SZ 8
> /**
>  * lpfc_wwn_set - Convert string to the 8 byte WWN value.
> @@ -2879,229 +2878,7 @@ lpfc_wwn_set(const char *buf, size_t cnt, char wwn[])
> 	}
> 	return 0;
> }
> -/**
> - * lpfc_soft_wwn_enable_store - Allows setting of the wwn if the key is valid
> - * @dev: class device that is converted into a Scsi_host.
> - * @attr: device attribute, not used.
> - * @buf: containing the string lpfc_soft_wwn_key.
> - * @count: must be size of lpfc_soft_wwn_key.
> - *
> - * Returns:
> - * -EINVAL if the buffer does not contain lpfc_soft_wwn_key
> - * length of buf indicates success
> - **/
> -static ssize_t
> -lpfc_soft_wwn_enable_store(struct device *dev, struct device_attribute *attr,
> -			   const char *buf, size_t count)
> -{
> -	struct Scsi_Host  *shost = class_to_shost(dev);
> -	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
> -	struct lpfc_hba   *phba = vport->phba;
> -	unsigned int cnt = count;
> -	uint8_t vvvl = vport->fc_sparam.cmn.valid_vendor_ver_level;
> -	u32 *fawwpn_key = (uint32_t *)&vport->fc_sparam.un.vendorVersion[0];
> -
> -	/*
> -	 * We're doing a simple sanity check for soft_wwpn setting.
> -	 * We require that the user write a specific key to enable
> -	 * the soft_wwpn attribute to be settable. Once the attribute
> -	 * is written, the enable key resets. If further updates are
> -	 * desired, the key must be written again to re-enable the
> -	 * attribute.
> -	 *
> -	 * The "key" is not secret - it is a hardcoded string shown
> -	 * here. The intent is to protect against the random user or
> -	 * application that is just writing attributes.
> -	 */
> -	if (vvvl == 1 && cpu_to_be32(*fawwpn_key) == FAPWWN_KEY_VENDOR) {
> -		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
> -				"0051 lpfc soft wwpn can not be enabled: "
> -				"fawwpn is enabled\n");
> -		return -EINVAL;
> -	}
> -
> -	/* count may include a LF at end of string */
> -	if (buf[cnt-1] == '\n')
> -		cnt--;
> -
> -	if ((cnt != strlen(lpfc_soft_wwn_key)) ||
> -	    (strncmp(buf, lpfc_soft_wwn_key, strlen(lpfc_soft_wwn_key)) != 0))
> -		return -EINVAL;
> -
> -	phba->soft_wwn_enable = 1;
> -
> -	dev_printk(KERN_WARNING, &phba->pcidev->dev,
> -		   "lpfc%d: soft_wwpn assignment has been enabled.\n",
> -		   phba->brd_no);
> -	dev_printk(KERN_WARNING, &phba->pcidev->dev,
> -		   "  The soft_wwpn feature is not supported by Broadcom.");
> -
> -	return count;
> -}
> -static DEVICE_ATTR_WO(lpfc_soft_wwn_enable);
> -
> -/**
> - * lpfc_soft_wwpn_show - Return the cfg soft ww port name of the adapter
> - * @dev: class device that is converted into a Scsi_host.
> - * @attr: device attribute, not used.
> - * @buf: on return contains the wwpn in hexadecimal.
> - *
> - * Returns: size of formatted string.
> - **/
> -static ssize_t
> -lpfc_soft_wwpn_show(struct device *dev, struct device_attribute *attr,
> -		    char *buf)
> -{
> -	struct Scsi_Host  *shost = class_to_shost(dev);
> -	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
> -	struct lpfc_hba   *phba = vport->phba;
> -
> -	return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
> -			(unsigned long long)phba->cfg_soft_wwpn);
> -}
> -
> -/**
> - * lpfc_soft_wwpn_store - Set the ww port name of the adapter
> - * @dev: class device that is converted into a Scsi_host.
> - * @attr: device attribute, not used.
> - * @buf: contains the wwpn in hexadecimal.
> - * @count: number of wwpn bytes in buf
> - *
> - * Returns:
> - * -EACCES hba reset not enabled, adapter over temp
> - * -EINVAL soft wwn not enabled, count is invalid, invalid wwpn byte invalid
> - * -EIO error taking adapter offline or online
> - * value of count on success
> - **/
> -static ssize_t
> -lpfc_soft_wwpn_store(struct device *dev, struct device_attribute *attr,
> -		     const char *buf, size_t count)
> -{
> -	struct Scsi_Host  *shost = class_to_shost(dev);
> -	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
> -	struct lpfc_hba   *phba = vport->phba;
> -	struct completion online_compl;
> -	int stat1 = 0, stat2 = 0;
> -	unsigned int cnt = count;
> -	u8 wwpn[WWN_SZ];
> -	int rc;
> -
> -	if (!phba->cfg_enable_hba_reset)
> -		return -EACCES;
> -	spin_lock_irq(&phba->hbalock);
> -	if (phba->over_temp_state == HBA_OVER_TEMP) {
> -		spin_unlock_irq(&phba->hbalock);
> -		return -EACCES;
> -	}
> -	spin_unlock_irq(&phba->hbalock);
> -	/* count may include a LF at end of string */
> -	if (buf[cnt-1] == '\n')
> -		cnt--;
> -
> -	if (!phba->soft_wwn_enable)
> -		return -EINVAL;
> -
> -	/* lock setting wwpn, wwnn down */
> -	phba->soft_wwn_enable = 0;
> -
> -	rc = lpfc_wwn_set(buf, cnt, wwpn);
> -	if (rc) {
> -		/* not able to set wwpn, unlock it */
> -		phba->soft_wwn_enable = 1;
> -		return rc;
> -	}
> -
> -	phba->cfg_soft_wwpn = wwn_to_u64(wwpn);
> -	fc_host_port_name(shost) = phba->cfg_soft_wwpn;
> -	if (phba->cfg_soft_wwnn)
> -		fc_host_node_name(shost) = phba->cfg_soft_wwnn;
> -
> -	dev_printk(KERN_NOTICE, &phba->pcidev->dev,
> -		   "lpfc%d: Reinitializing to use soft_wwpn\n", phba->brd_no);
> -
> -	stat1 = lpfc_do_offline(phba, LPFC_EVT_OFFLINE);
> -	if (stat1)
> -		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
> -				"0463 lpfc_soft_wwpn attribute set failed to "
> -				"reinit adapter - %d\n", stat1);
> -	init_completion(&online_compl);
> -	rc = lpfc_workq_post_event(phba, &stat2, &online_compl,
> -				   LPFC_EVT_ONLINE);
> -	if (rc == 0)
> -		return -ENOMEM;
> 
> -	wait_for_completion(&online_compl);
> -	if (stat2)
> -		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
> -				"0464 lpfc_soft_wwpn attribute set failed to "
> -				"reinit adapter - %d\n", stat2);
> -	return (stat1 || stat2) ? -EIO : count;
> -}
> -static DEVICE_ATTR_RW(lpfc_soft_wwpn);
> -
> -/**
> - * lpfc_soft_wwnn_show - Return the cfg soft ww node name for the adapter
> - * @dev: class device that is converted into a Scsi_host.
> - * @attr: device attribute, not used.
> - * @buf: on return contains the wwnn in hexadecimal.
> - *
> - * Returns: size of formatted string.
> - **/
> -static ssize_t
> -lpfc_soft_wwnn_show(struct device *dev, struct device_attribute *attr,
> -		    char *buf)
> -{
> -	struct Scsi_Host *shost = class_to_shost(dev);
> -	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
> -	return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
> -			(unsigned long long)phba->cfg_soft_wwnn);
> -}
> -
> -/**
> - * lpfc_soft_wwnn_store - sets the ww node name of the adapter
> - * @dev: class device that is converted into a Scsi_host.
> - * @attr: device attribute, not used.
> - * @buf: contains the ww node name in hexadecimal.
> - * @count: number of wwnn bytes in buf.
> - *
> - * Returns:
> - * -EINVAL soft wwn not enabled, count is invalid, invalid wwnn byte invalid
> - * value of count on success
> - **/
> -static ssize_t
> -lpfc_soft_wwnn_store(struct device *dev, struct device_attribute *attr,
> -		     const char *buf, size_t count)
> -{
> -	struct Scsi_Host *shost = class_to_shost(dev);
> -	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
> -	unsigned int cnt = count;
> -	u8 wwnn[WWN_SZ];
> -	int rc;
> -
> -	/* count may include a LF at end of string */
> -	if (buf[cnt-1] == '\n')
> -		cnt--;
> -
> -	if (!phba->soft_wwn_enable)
> -		return -EINVAL;
> -
> -	rc = lpfc_wwn_set(buf, cnt, wwnn);
> -	if (rc) {
> -		/* Allow wwnn to be set many times, as long as the enable
> -		 * is set. However, once the wwpn is set, everything locks.
> -		 */
> -		return rc;
> -	}
> -
> -	phba->cfg_soft_wwnn = wwn_to_u64(wwnn);
> -
> -	dev_printk(KERN_NOTICE, &phba->pcidev->dev,
> -		   "lpfc%d: soft_wwnn set. Value will take effect upon "
> -		   "setting of the soft_wwpn\n", phba->brd_no);
> -
> -	return count;
> -}
> -static DEVICE_ATTR_RW(lpfc_soft_wwnn);
> 
> /**
>  * lpfc_oas_tgt_show - Return wwpn of target whose luns maybe enabled for
> @@ -6495,9 +6272,6 @@ static struct attribute *lpfc_hba_attrs[] = {
> 	&dev_attr_lpfc_nvme_enable_fb.attr,
> 	&dev_attr_lpfc_nvmet_fb_size.attr,
> 	&dev_attr_lpfc_enable_bg.attr,
> -	&dev_attr_lpfc_soft_wwnn.attr,
> -	&dev_attr_lpfc_soft_wwpn.attr,
> -	&dev_attr_lpfc_soft_wwn_enable.attr,
> 	&dev_attr_lpfc_enable_hba_reset.attr,
> 	&dev_attr_lpfc_enable_hba_heartbeat.attr,
> 	&dev_attr_lpfc_EnableXLane.attr,
> @@ -7727,8 +7501,6 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
> 	    phba->sli_rev == LPFC_SLI_REV4)
> 		phba->cfg_irq_chann = phba->cfg_hdw_queue;
> 
> -	phba->cfg_soft_wwnn = 0L;
> -	phba->cfg_soft_wwpn = 0L;
> 	lpfc_sg_seg_cnt_init(phba, lpfc_sg_seg_cnt);
> 	lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth);
> 	lpfc_aer_support_init(phba, lpfc_aer_support);
> diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
> index 6e247b6be7de..eed6464bd880 100644
> --- a/drivers/scsi/lpfc/lpfc_init.c
> +++ b/drivers/scsi/lpfc/lpfc_init.c
> @@ -340,7 +340,6 @@ lpfc_dump_wakeup_param_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
> 
> /**
>  * lpfc_update_vport_wwn - Updates the fc_nodename, fc_portname,
> - *	cfg_soft_wwnn, cfg_soft_wwpn
>  * @vport: pointer to lpfc vport data structure.
>  *
>  *
> @@ -353,19 +352,11 @@ lpfc_update_vport_wwn(struct lpfc_vport *vport)
> 	uint8_t vvvl = vport->fc_sparam.cmn.valid_vendor_ver_level;
> 	u32 *fawwpn_key = (u32 *)&vport->fc_sparam.un.vendorVersion[0];
> 
> -	/* If the soft name exists then update it using the service params */
> -	if (vport->phba->cfg_soft_wwnn)
> -		u64_to_wwn(vport->phba->cfg_soft_wwnn,
> -			   vport->fc_sparam.nodeName.u.wwn);
> -	if (vport->phba->cfg_soft_wwpn)
> -		u64_to_wwn(vport->phba->cfg_soft_wwpn,
> -			   vport->fc_sparam.portName.u.wwn);
> -
> 	/*
> 	 * If the name is empty or there exists a soft name
> 	 * then copy the service params name, otherwise use the fc name
> 	 */
> -	if (vport->fc_nodename.u.wwn[0] == 0 || vport->phba->cfg_soft_wwnn)
> +	if (vport->fc_nodename.u.wwn[0] == 0)
> 		memcpy(&vport->fc_nodename, &vport->fc_sparam.nodeName,
> 			sizeof(struct lpfc_name));
> 	else
> @@ -382,7 +373,6 @@ lpfc_update_vport_wwn(struct lpfc_vport *vport)
> 		vport->vport_flag |= FAWWPN_PARAM_CHG;
> 
> 	if (vport->fc_portname.u.wwn[0] == 0 ||
> -	    vport->phba->cfg_soft_wwpn ||
> 	    (vvvl == 1 && cpu_to_be32(*fawwpn_key) == FAPWWN_KEY_VENDOR) ||
> 	    vport->vport_flag & FAWWPN_SET) {
> 		memcpy(&vport->fc_portname, &vport->fc_sparam.portName,
> -- 
> 2.26.2
> 

Looks Okay. 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	 Oracle Linux Engineering
Martin K. Petersen March 15, 2022, 3:30 a.m. UTC | #2
James,

> The soft_wwpn/soft_wwn functionality, which allows the driver to
> modify service parameters in an attempt to override the
> adapter-assigned WWN, was originally attempted to be removed roughly 6
> yrs ago as new fabric features were being introduced that clashed with
> the implementation.  In the end, the feature was left in with the user
> being responsible if things went south.

Applied to 5.18/scsi-staging, thanks!
Martin K. Petersen March 19, 2022, 3:56 a.m. UTC | #3
On Thu, 10 Mar 2022 07:48:45 -0800, James Smart wrote:

> The soft_wwpn/soft_wwn functionality, which allows the driver to modify
> service parameters in an attempt to override the adapter-assigned WWN,
> was originally attempted to be removed roughly 6 yrs ago as new fabric
> features were being introduced that clashed with the implementation.
> In the end, the feature was left in with the user being responsible if
> things went south.
> 
> [...]

Applied to 5.18/scsi-queue, thanks!

[1/1] lpfc: Remove failing soft_wwn support
      https://git.kernel.org/mkp/scsi/c/2ea3a393bfae
diff mbox series

Patch

diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index 8197ba8d401d..86653aa9b389 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -1153,8 +1153,6 @@  struct lpfc_hba {
 	uint32_t cfg_nvme_seg_cnt;
 	uint32_t cfg_scsi_seg_cnt;
 	uint32_t cfg_sg_dma_buf_size;
-	uint64_t cfg_soft_wwnn;
-	uint64_t cfg_soft_wwpn;
 	uint32_t cfg_hba_queue_depth;
 	uint32_t cfg_enable_hba_reset;
 	uint32_t cfg_enable_hba_heartbeat;
@@ -1286,7 +1284,6 @@  struct lpfc_hba {
 #define VPD_PORT            0x8         /* valid vpd port data */
 #define VPD_MASK            0xf         /* mask for any vpd data */
 
-	uint8_t soft_wwn_enable;
 
 	struct timer_list fcp_poll_timer;
 	struct timer_list eratt_poll;
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index bac78fbce8d6..ff99f7cdbefa 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -2835,7 +2835,6 @@  static DEVICE_ATTR(lpfc_xlane_supported, S_IRUGO, lpfc_oas_supported_show,
 		   NULL);
 static DEVICE_ATTR(cmf_info, 0444, lpfc_cmf_info_show, NULL);
 
-static char *lpfc_soft_wwn_key = "C99G71SL8032A";
 #define WWN_SZ 8
 /**
  * lpfc_wwn_set - Convert string to the 8 byte WWN value.
@@ -2879,229 +2878,7 @@  lpfc_wwn_set(const char *buf, size_t cnt, char wwn[])
 	}
 	return 0;
 }
-/**
- * lpfc_soft_wwn_enable_store - Allows setting of the wwn if the key is valid
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: containing the string lpfc_soft_wwn_key.
- * @count: must be size of lpfc_soft_wwn_key.
- *
- * Returns:
- * -EINVAL if the buffer does not contain lpfc_soft_wwn_key
- * length of buf indicates success
- **/
-static ssize_t
-lpfc_soft_wwn_enable_store(struct device *dev, struct device_attribute *attr,
-			   const char *buf, size_t count)
-{
-	struct Scsi_Host  *shost = class_to_shost(dev);
-	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
-	struct lpfc_hba   *phba = vport->phba;
-	unsigned int cnt = count;
-	uint8_t vvvl = vport->fc_sparam.cmn.valid_vendor_ver_level;
-	u32 *fawwpn_key = (uint32_t *)&vport->fc_sparam.un.vendorVersion[0];
-
-	/*
-	 * We're doing a simple sanity check for soft_wwpn setting.
-	 * We require that the user write a specific key to enable
-	 * the soft_wwpn attribute to be settable. Once the attribute
-	 * is written, the enable key resets. If further updates are
-	 * desired, the key must be written again to re-enable the
-	 * attribute.
-	 *
-	 * The "key" is not secret - it is a hardcoded string shown
-	 * here. The intent is to protect against the random user or
-	 * application that is just writing attributes.
-	 */
-	if (vvvl == 1 && cpu_to_be32(*fawwpn_key) == FAPWWN_KEY_VENDOR) {
-		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-				"0051 lpfc soft wwpn can not be enabled: "
-				"fawwpn is enabled\n");
-		return -EINVAL;
-	}
-
-	/* count may include a LF at end of string */
-	if (buf[cnt-1] == '\n')
-		cnt--;
-
-	if ((cnt != strlen(lpfc_soft_wwn_key)) ||
-	    (strncmp(buf, lpfc_soft_wwn_key, strlen(lpfc_soft_wwn_key)) != 0))
-		return -EINVAL;
-
-	phba->soft_wwn_enable = 1;
-
-	dev_printk(KERN_WARNING, &phba->pcidev->dev,
-		   "lpfc%d: soft_wwpn assignment has been enabled.\n",
-		   phba->brd_no);
-	dev_printk(KERN_WARNING, &phba->pcidev->dev,
-		   "  The soft_wwpn feature is not supported by Broadcom.");
-
-	return count;
-}
-static DEVICE_ATTR_WO(lpfc_soft_wwn_enable);
-
-/**
- * lpfc_soft_wwpn_show - Return the cfg soft ww port name of the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: on return contains the wwpn in hexadecimal.
- *
- * Returns: size of formatted string.
- **/
-static ssize_t
-lpfc_soft_wwpn_show(struct device *dev, struct device_attribute *attr,
-		    char *buf)
-{
-	struct Scsi_Host  *shost = class_to_shost(dev);
-	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
-	struct lpfc_hba   *phba = vport->phba;
-
-	return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
-			(unsigned long long)phba->cfg_soft_wwpn);
-}
-
-/**
- * lpfc_soft_wwpn_store - Set the ww port name of the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: contains the wwpn in hexadecimal.
- * @count: number of wwpn bytes in buf
- *
- * Returns:
- * -EACCES hba reset not enabled, adapter over temp
- * -EINVAL soft wwn not enabled, count is invalid, invalid wwpn byte invalid
- * -EIO error taking adapter offline or online
- * value of count on success
- **/
-static ssize_t
-lpfc_soft_wwpn_store(struct device *dev, struct device_attribute *attr,
-		     const char *buf, size_t count)
-{
-	struct Scsi_Host  *shost = class_to_shost(dev);
-	struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
-	struct lpfc_hba   *phba = vport->phba;
-	struct completion online_compl;
-	int stat1 = 0, stat2 = 0;
-	unsigned int cnt = count;
-	u8 wwpn[WWN_SZ];
-	int rc;
-
-	if (!phba->cfg_enable_hba_reset)
-		return -EACCES;
-	spin_lock_irq(&phba->hbalock);
-	if (phba->over_temp_state == HBA_OVER_TEMP) {
-		spin_unlock_irq(&phba->hbalock);
-		return -EACCES;
-	}
-	spin_unlock_irq(&phba->hbalock);
-	/* count may include a LF at end of string */
-	if (buf[cnt-1] == '\n')
-		cnt--;
-
-	if (!phba->soft_wwn_enable)
-		return -EINVAL;
-
-	/* lock setting wwpn, wwnn down */
-	phba->soft_wwn_enable = 0;
-
-	rc = lpfc_wwn_set(buf, cnt, wwpn);
-	if (rc) {
-		/* not able to set wwpn, unlock it */
-		phba->soft_wwn_enable = 1;
-		return rc;
-	}
-
-	phba->cfg_soft_wwpn = wwn_to_u64(wwpn);
-	fc_host_port_name(shost) = phba->cfg_soft_wwpn;
-	if (phba->cfg_soft_wwnn)
-		fc_host_node_name(shost) = phba->cfg_soft_wwnn;
-
-	dev_printk(KERN_NOTICE, &phba->pcidev->dev,
-		   "lpfc%d: Reinitializing to use soft_wwpn\n", phba->brd_no);
-
-	stat1 = lpfc_do_offline(phba, LPFC_EVT_OFFLINE);
-	if (stat1)
-		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-				"0463 lpfc_soft_wwpn attribute set failed to "
-				"reinit adapter - %d\n", stat1);
-	init_completion(&online_compl);
-	rc = lpfc_workq_post_event(phba, &stat2, &online_compl,
-				   LPFC_EVT_ONLINE);
-	if (rc == 0)
-		return -ENOMEM;
 
-	wait_for_completion(&online_compl);
-	if (stat2)
-		lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-				"0464 lpfc_soft_wwpn attribute set failed to "
-				"reinit adapter - %d\n", stat2);
-	return (stat1 || stat2) ? -EIO : count;
-}
-static DEVICE_ATTR_RW(lpfc_soft_wwpn);
-
-/**
- * lpfc_soft_wwnn_show - Return the cfg soft ww node name for the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: on return contains the wwnn in hexadecimal.
- *
- * Returns: size of formatted string.
- **/
-static ssize_t
-lpfc_soft_wwnn_show(struct device *dev, struct device_attribute *attr,
-		    char *buf)
-{
-	struct Scsi_Host *shost = class_to_shost(dev);
-	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
-	return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
-			(unsigned long long)phba->cfg_soft_wwnn);
-}
-
-/**
- * lpfc_soft_wwnn_store - sets the ww node name of the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: contains the ww node name in hexadecimal.
- * @count: number of wwnn bytes in buf.
- *
- * Returns:
- * -EINVAL soft wwn not enabled, count is invalid, invalid wwnn byte invalid
- * value of count on success
- **/
-static ssize_t
-lpfc_soft_wwnn_store(struct device *dev, struct device_attribute *attr,
-		     const char *buf, size_t count)
-{
-	struct Scsi_Host *shost = class_to_shost(dev);
-	struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
-	unsigned int cnt = count;
-	u8 wwnn[WWN_SZ];
-	int rc;
-
-	/* count may include a LF at end of string */
-	if (buf[cnt-1] == '\n')
-		cnt--;
-
-	if (!phba->soft_wwn_enable)
-		return -EINVAL;
-
-	rc = lpfc_wwn_set(buf, cnt, wwnn);
-	if (rc) {
-		/* Allow wwnn to be set many times, as long as the enable
-		 * is set. However, once the wwpn is set, everything locks.
-		 */
-		return rc;
-	}
-
-	phba->cfg_soft_wwnn = wwn_to_u64(wwnn);
-
-	dev_printk(KERN_NOTICE, &phba->pcidev->dev,
-		   "lpfc%d: soft_wwnn set. Value will take effect upon "
-		   "setting of the soft_wwpn\n", phba->brd_no);
-
-	return count;
-}
-static DEVICE_ATTR_RW(lpfc_soft_wwnn);
 
 /**
  * lpfc_oas_tgt_show - Return wwpn of target whose luns maybe enabled for
@@ -6495,9 +6272,6 @@  static struct attribute *lpfc_hba_attrs[] = {
 	&dev_attr_lpfc_nvme_enable_fb.attr,
 	&dev_attr_lpfc_nvmet_fb_size.attr,
 	&dev_attr_lpfc_enable_bg.attr,
-	&dev_attr_lpfc_soft_wwnn.attr,
-	&dev_attr_lpfc_soft_wwpn.attr,
-	&dev_attr_lpfc_soft_wwn_enable.attr,
 	&dev_attr_lpfc_enable_hba_reset.attr,
 	&dev_attr_lpfc_enable_hba_heartbeat.attr,
 	&dev_attr_lpfc_EnableXLane.attr,
@@ -7727,8 +7501,6 @@  lpfc_get_cfgparam(struct lpfc_hba *phba)
 	    phba->sli_rev == LPFC_SLI_REV4)
 		phba->cfg_irq_chann = phba->cfg_hdw_queue;
 
-	phba->cfg_soft_wwnn = 0L;
-	phba->cfg_soft_wwpn = 0L;
 	lpfc_sg_seg_cnt_init(phba, lpfc_sg_seg_cnt);
 	lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth);
 	lpfc_aer_support_init(phba, lpfc_aer_support);
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 6e247b6be7de..eed6464bd880 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -340,7 +340,6 @@  lpfc_dump_wakeup_param_cmpl(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmboxq)
 
 /**
  * lpfc_update_vport_wwn - Updates the fc_nodename, fc_portname,
- *	cfg_soft_wwnn, cfg_soft_wwpn
  * @vport: pointer to lpfc vport data structure.
  *
  *
@@ -353,19 +352,11 @@  lpfc_update_vport_wwn(struct lpfc_vport *vport)
 	uint8_t vvvl = vport->fc_sparam.cmn.valid_vendor_ver_level;
 	u32 *fawwpn_key = (u32 *)&vport->fc_sparam.un.vendorVersion[0];
 
-	/* If the soft name exists then update it using the service params */
-	if (vport->phba->cfg_soft_wwnn)
-		u64_to_wwn(vport->phba->cfg_soft_wwnn,
-			   vport->fc_sparam.nodeName.u.wwn);
-	if (vport->phba->cfg_soft_wwpn)
-		u64_to_wwn(vport->phba->cfg_soft_wwpn,
-			   vport->fc_sparam.portName.u.wwn);
-
 	/*
 	 * If the name is empty or there exists a soft name
 	 * then copy the service params name, otherwise use the fc name
 	 */
-	if (vport->fc_nodename.u.wwn[0] == 0 || vport->phba->cfg_soft_wwnn)
+	if (vport->fc_nodename.u.wwn[0] == 0)
 		memcpy(&vport->fc_nodename, &vport->fc_sparam.nodeName,
 			sizeof(struct lpfc_name));
 	else
@@ -382,7 +373,6 @@  lpfc_update_vport_wwn(struct lpfc_vport *vport)
 		vport->vport_flag |= FAWWPN_PARAM_CHG;
 
 	if (vport->fc_portname.u.wwn[0] == 0 ||
-	    vport->phba->cfg_soft_wwpn ||
 	    (vvvl == 1 && cpu_to_be32(*fawwpn_key) == FAPWWN_KEY_VENDOR) ||
 	    vport->vport_flag & FAWWPN_SET) {
 		memcpy(&vport->fc_portname, &vport->fc_sparam.portName,