Re: [PATCH] scsi:scsi_transport_fc:Add an additional flag to fc_host_fpin_rcv()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Feb 8, 2023, at 7:43 PM, Muneendra Kumar <muneendra.kumar@xxxxxxxxxxxx> wrote:
> 
> From: Muneendra <muneendra.kumar@xxxxxxxxxxxx>
> 
> The LLDD and the stack currently process FPINs received from the fabric,
> but the stack is not aware of any action taken by the driver to alleviate
> congestion. The current interface between the driver and the SCSI stack is
> limited to passing the notification mainly for statistics and heuristics.
> 
> The reaction to an FPIN could be handled either by the driver or by the
> stack (marginal path and failover). This patch enhances the interface to
> indicate if action on an FPIN has already been reacted to by the
> LLDDs or not.Add an additional flag to fc_host_fpin_rcv() to indicate
> if the FPIN has been acknowledged/reacted to by the driver.
> 
> Also added a new event code FCH_EVT_LINK_FPIN_ACK to notify to the user
> that the event has been acknowledged/reacted by the LLDD driver
> 
> Signed-off-by: Anil Gurumurthy <agurumurthy@xxxxxxxxxxx>
> Signed-off-by: Nilesh Javali <njavali@xxxxxxxxxxx>
> Signed-off-by: Muneendra <muneendra.kumar@xxxxxxxxxxxx>
> ---
> drivers/scsi/lpfc/lpfc_els.c     |  2 +-
> drivers/scsi/qla2xxx/qla_isr.c   |  2 +-
> drivers/scsi/scsi_transport_fc.c | 10 +++++++---
> include/scsi/scsi_transport_fc.h |  4 +++-
> 4 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
> index 569639dc8b2c..aee5d0d1187d 100644
> --- a/drivers/scsi/lpfc/lpfc_els.c
> +++ b/drivers/scsi/lpfc/lpfc_els.c
> @@ -10287,7 +10287,7 @@ lpfc_els_rcv_fpin(struct lpfc_vport *vport, void *p, u32 fpin_length)
> /* Send every descriptor individually to the upper layer */
> if (deliver)
> fc_host_fpin_rcv(lpfc_shost_from_vport(vport),
> - fpin_length, (char *)fpin);
> + fpin_length, (char *)fpin, 0);
> desc_cnt++;
> }
> }
> diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
> index 46e8b38603f0..030625ebb4e6 100644
> --- a/drivers/scsi/qla2xxx/qla_isr.c
> +++ b/drivers/scsi/qla2xxx/qla_isr.c
> @@ -45,7 +45,7 @@ qla27xx_process_purex_fpin(struct scsi_qla_host *vha, struct purex_item *item)
> ql_dump_buffer(ql_dbg_init + ql_dbg_verbose, vha, 0x508f,
>       pkt, pkt_size);
> 
> - fc_host_fpin_rcv(vha->host, pkt_size, (char *)pkt);
> + fc_host_fpin_rcv(vha->host, pkt_size, (char *)pkt, 0);
> }
> 
> const char *const port_state_str[] = {
> diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
> index 0965f8a7134f..f12e9467ebb4 100644
> --- a/drivers/scsi/scsi_transport_fc.c
> +++ b/drivers/scsi/scsi_transport_fc.c
> @@ -137,6 +137,7 @@ static const struct {
> { FCH_EVT_PORT_FABRIC, "port_fabric" },
> { FCH_EVT_LINK_UNKNOWN, "link_unknown" },
> { FCH_EVT_LINK_FPIN, "link_FPIN" },
> + { FCH_EVT_LINK_FPIN_ACK, "link_FPIN_ACK" },
> { FCH_EVT_VENDOR_UNIQUE, "vendor_unique" },
> };
> fc_enum_name_search(host_event_code, fc_host_event_code,
> @@ -894,17 +895,20 @@ fc_fpin_congn_stats_update(struct Scsi_Host *shost,
>  * @shost: host the FPIN was received on
>  * @fpin_len: length of FPIN payload, in bytes
>  * @fpin_buf: pointer to FPIN payload
> - *
> + * @event_acknowledge: 1, if LLDD handles this event.
>  * Notes:
>  * This routine assumes no locks are held on entry.
>  */
> void
> -fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf)
> +fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf,
> + u8 event_acknowledge)
> {
> struct fc_els_fpin *fpin = (struct fc_els_fpin *)fpin_buf;
> struct fc_tlv_desc *tlv;
> u32 desc_cnt = 0, bytes_remain;
> u32 dtag;
> + enum fc_host_event_code event_code =
> + event_acknowledge ? FCH_EVT_LINK_FPIN_ACK : FCH_EVT_LINK_FPIN;
> 
> /* Update Statistics */
> tlv = (struct fc_tlv_desc *)&fpin->fpin_desc[0];
> @@ -934,7 +938,7 @@ fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf)
> }
> 
> fc_host_post_fc_event(shost, fc_get_event_number(),
> - FCH_EVT_LINK_FPIN, fpin_len, fpin_buf, 0);
> + event_code, fpin_len, fpin_buf, 0);
> }
> EXPORT_SYMBOL(fc_host_fpin_rcv);
> 
> diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h
> index 3dcda19d3520..483513c57597 100644
> --- a/include/scsi/scsi_transport_fc.h
> +++ b/include/scsi/scsi_transport_fc.h
> @@ -496,6 +496,7 @@ enum fc_host_event_code  {
> FCH_EVT_PORT_FABRIC = 0x204,
> FCH_EVT_LINK_UNKNOWN = 0x500,
> FCH_EVT_LINK_FPIN = 0x501,
> + FCH_EVT_LINK_FPIN_ACK = 0x502,
> FCH_EVT_VENDOR_UNIQUE = 0xffff,
> };
> 
> @@ -856,7 +857,8 @@ void fc_host_post_fc_event(struct Scsi_Host *shost, u32 event_number,
> * Note: when calling fc_host_post_fc_event(), vendor_id may be
> *   specified as 0.
> */
> -void fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf);
> +void fc_host_fpin_rcv(struct Scsi_Host *shost, u32 fpin_len, char *fpin_buf,
> + u8 event_acknowledge);
> struct fc_vport *fc_vport_create(struct Scsi_Host *shost, int channel,
> struct fc_vport_identifiers *);
> int fc_vport_terminate(struct fc_vport *vport);
> -- 
> 2.26.2
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx <mailto:himanshu.madhani@xxxxxxxxxx>>

-- 
Himanshu Madhani Oracle Linux Engineering





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux