From: Karan Tilak Kumar <kartilak@cisco.com>
To: sebaddel@cisco.com
Cc: arulponn@cisco.com, djhawar@cisco.com, gcboffa@cisco.com,
mkai2@cisco.com, satishkh@cisco.com, aeasi@cisco.com,
jejb@linux.ibm.com, martin.petersen@oracle.com,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org,
jmeneghi@redhat.com, revers@redhat.com, dan.carpenter@linaro.org,
adakopou@redhat.com, lduncan@suse.com,
Karan Tilak Kumar <kartilak@cisco.com>,
Hannes Reinecke <hare@kernel.org>
Subject: [PATCH 10/13] scsi: fnic: Abort timed-out NVMe LS requests
Date: Thu, 21 May 2026 11:04:55 -0700 [thread overview]
Message-ID: <20260521180458.5448-11-kartilak@cisco.com> (raw)
In-Reply-To: <20260521180458.5448-1-kartilak@cisco.com>
Add an FDLS helper that sends ABTS frames for outstanding NVMe LS
requests.
Use the active LS request OXID when building the ABTS frame, send it
through the FCoE transmit path, and call it from LS timeout and abort
handling.
Reviewed-by: Sesidhar Baddela <sebaddel@cisco.com>
Reviewed-by: Arulprabhu Ponnusamy <arulponn@cisco.com>
Reviewed-by: Gian Carlo Boffa <gcboffa@cisco.com>
Reviewed-by: Arun Easi <aeasi@cisco.com>
Reviewed-by: Hannes Reinecke <hare@kernel.org>
Reviewed-by: Lee Duncan <lduncan@suse.com>
Signed-off-by: Karan Tilak Kumar <kartilak@cisco.com>
Co-developed-by: Hannes Reinecke <hare@kernel.org>
---
drivers/scsi/fnic/fdls_disc.c | 38 +++++++++++++++++++++++++++++++++++
drivers/scsi/fnic/fnic_fdls.h | 2 ++
drivers/scsi/fnic/fnic_nvme.c | 16 +++++++++++++++
3 files changed, 56 insertions(+)
diff --git a/drivers/scsi/fnic/fdls_disc.c b/drivers/scsi/fnic/fdls_disc.c
index 0fcdfdea8fb4..5d010b38102c 100644
--- a/drivers/scsi/fnic/fdls_disc.c
+++ b/drivers/scsi/fnic/fdls_disc.c
@@ -654,6 +654,44 @@ fdls_send_logo_resp(struct fnic_iport_s *iport,
fnic_send_fcoe_frame(iport, frame, frame_size);
}
+int fdls_send_ls_req_abts(struct fnic_iport_s *iport,
+ struct fnic_tport_s *tport, unsigned int oxid)
+{
+ uint8_t *frame;
+ uint8_t s_id[3];
+ uint8_t d_id[3];
+ struct fnic *fnic = iport->fnic;
+ struct fc_frame_header *pls_req_abts;
+ uint16_t frame_size = FNIC_ETH_FCOE_HDRS_OFFSET +
+ sizeof(struct fc_frame_header);
+
+ frame = fdls_alloc_frame(iport);
+ if (frame == NULL) {
+ FNIC_FCS_DBG(KERN_ERR, fnic,
+ "Failed to allocate frame to send ls req ABTS");
+ return -ENOMEM;
+ }
+
+ pls_req_abts = (struct fc_frame_header *) (frame +
+ FNIC_ETH_FCOE_HDRS_OFFSET);
+ fdls_init_fabric_abts_frame(frame, iport);
+
+ hton24(s_id, iport->fcid);
+ hton24(d_id, tport->fcid);
+ FNIC_STD_SET_S_ID(*pls_req_abts, s_id);
+ FNIC_STD_SET_D_ID(*pls_req_abts, d_id);
+
+ FNIC_STD_SET_OX_ID(*pls_req_abts, oxid);
+
+ FNIC_FCS_DBG(KERN_INFO, fnic,
+ "iport 0x%x: tport: 0x%x FDLS sending ls req abts with oxid: 0x%x",
+ iport->fcid, tport->fcid, oxid);
+
+ fnic_send_fcoe_frame(iport, frame, frame_size);
+ return 0;
+}
+
+
void
fdls_send_tport_abts(struct fnic_iport_s *iport,
struct fnic_tport_s *tport)
diff --git a/drivers/scsi/fnic/fnic_fdls.h b/drivers/scsi/fnic/fnic_fdls.h
index 0a68d0fb11b1..ce4b3aae77e3 100644
--- a/drivers/scsi/fnic/fnic_fdls.h
+++ b/drivers/scsi/fnic/fnic_fdls.h
@@ -407,6 +407,8 @@ uint16_t fdls_alloc_oxid(struct fnic_iport_s *iport, int oxid_frame_type,
uint16_t *active_oxid);
void fdls_free_oxid(struct fnic_iport_s *iport,
uint16_t oxid, uint16_t *active_oxid);
+int fdls_send_ls_req_abts(struct fnic_iport_s *iport,
+ struct fnic_tport_s *tport, unsigned int oxid);
void fdls_tgt_logout(struct fnic_iport_s *iport,
struct fnic_tport_s *tport);
void fnic_del_fabric_timer_sync(struct fnic *fnic);
diff --git a/drivers/scsi/fnic/fnic_nvme.c b/drivers/scsi/fnic/fnic_nvme.c
index 83a43df28956..dc202f0ae4d8 100644
--- a/drivers/scsi/fnic/fnic_nvme.c
+++ b/drivers/scsi/fnic/fnic_nvme.c
@@ -1195,6 +1195,7 @@ void nvfnic_ls_req_timeout(struct timer_list *t)
struct fnic_iport_s *iport = &fnic->iport;
struct fnic_tport_s *tport = (struct fnic_tport_s *) nvfnic_ls_req->tport;
uint16_t oxid = nvfnic_ls_req->oxid;
+ int timeout;
FNIC_NVME_DBG(KERN_INFO, fnic,
"tport: 0x%x lsreq: 0x%x state: %d timeout\n",
@@ -1228,6 +1229,19 @@ void nvfnic_ls_req_timeout(struct timer_list *t)
FNIC_NVME_DBG(KERN_ERR, fnic,
"tport: 0x%x lsreq: 0x%x sending abort\n",
tport->fcid, nvfnic_ls_req->oxid);
+ nvfnic_ls_req->state = FNIC_LS_REQ_CMD_ABTS_PENDING;
+ spin_unlock_irqrestore(&fnic->fnic_lock, fnic->lock_flags);
+
+ if (fdls_send_ls_req_abts(iport, tport, nvfnic_ls_req->oxid) == 0) {
+ timeout = FNIC_LS_REQ_TMO_MSECS(ls_req->timeout);
+ mod_timer(&nvfnic_ls_req->ls_req_timer,
+ round_jiffies(jiffies + msecs_to_jiffies(timeout)));
+ return;
+ }
+ FNIC_NVME_DBG(KERN_ERR, fnic,
+ "tport: 0x%x lsreq: 0x%x cannot send abort\n",
+ tport->fcid, oxid);
+ spin_lock_irqsave(&fnic->fnic_lock, fnic->lock_flags);
}
if (ls_req->private == NULL) {
@@ -1519,6 +1533,8 @@ void nvfnic_ls_req_abort(struct nvme_fc_local_port *lport,
mod_timer(&nvfnic_ls_req->ls_req_timer,
round_jiffies(jiffies + msecs_to_jiffies(timeout)));
spin_unlock_irqrestore(&fnic->fnic_lock, fnic->lock_flags);
+
+ fdls_send_ls_req_abts(iport, tport, nvfnic_ls_req->oxid);
}
bool nvfnic_queue_abort_io_req(struct fnic *fnic, int tag,
--
2.47.1
next prev parent reply other threads:[~2026-05-21 18:11 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-21 18:04 [PATCH 00/13] Introduce functionality for NVMe initiator Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 01/13] scsi: fnic: Make debug logging protocol independent Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 02/13] scsi: fnic: Use fnic_num for non-SCSI identifiers Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 03/13] scsi: fnic: Decode firmware role configuration Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 04/13] scsi: fnic: Advertise NVMe initiator service parameters Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 05/13] scsi: fnic: Add FDLS role handling for NVMe initiators Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 06/13] scsi: fnic: Add the NVMe/FC transport path Karan Tilak Kumar
2026-05-27 9:00 ` Marco Crivellari
2026-05-27 18:17 ` Karan Tilak Kumar (kartilak)
2026-05-21 18:04 ` [PATCH 07/13] scsi: fnic: Route completions and resets by initiator role Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 08/13] scsi: fnic: Handle NVMe LS frames in FDLS Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 09/13] scsi: fnic: Send NVMe LS requests through FDLS Karan Tilak Kumar
2026-05-21 18:04 ` Karan Tilak Kumar [this message]
2026-05-21 18:04 ` [PATCH 11/13] scsi: fnic: Track NVMe transport statistics Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 12/13] scsi: fnic: Expose NVMe transport state in debugfs Karan Tilak Kumar
2026-05-21 18:04 ` [PATCH 13/13] scsi: fnic: Bump up version number Karan Tilak Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260521180458.5448-11-kartilak@cisco.com \
--to=kartilak@cisco.com \
--cc=adakopou@redhat.com \
--cc=aeasi@cisco.com \
--cc=arulponn@cisco.com \
--cc=dan.carpenter@linaro.org \
--cc=djhawar@cisco.com \
--cc=gcboffa@cisco.com \
--cc=hare@kernel.org \
--cc=jejb@linux.ibm.com \
--cc=jmeneghi@redhat.com \
--cc=lduncan@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mkai2@cisco.com \
--cc=revers@redhat.com \
--cc=satishkh@cisco.com \
--cc=sebaddel@cisco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®