From: M Nikhil <nikh1092@linux.ibm.com>
To: linux-s390@vger.kernel.org, sashiko-reviews@lists.linux.dev
Cc: M Nikhil <nikh1092@linux.ibm.com>
Subject: [PATCH v12 1/2] zfcp: Replace sg-list with sg_table in zfcp_fsf_ct_els structure
Date: Thu, 24 Sep 2026 08:09:22 +0200 [thread overview]
Message-ID: <20260924060923.3076902-2-nikh1092@linux.ibm.com> (raw)
In-Reply-To: <20260924060923.3076902-1-nikh1092@linux.ibm.com>
The zfcp_fsf_ct_els data structure is updated to replace the sg_req and
sg_resp members, which are of type struct scatterlist, with request and
response sg_table instances.
These sg_table structure reference the corresponding scatterlists
(sg_req and sg_resp) maintained in struct zfcp_fc_req.
These changes allows to track the original and mapped scatterlist nents
once zfcp is converted to use DMA-API for mapping the sg lists.
Signed-off-by: M Nikhil <nikh1092@linux.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
---
drivers/s390/scsi/zfcp_dbf.c | 16 ++++++++--------
drivers/s390/scsi/zfcp_fc.c | 36 ++++++++++++++++++++++++------------
drivers/s390/scsi/zfcp_fsf.c | 6 ++++--
drivers/s390/scsi/zfcp_fsf.h | 9 +++++----
4 files changed, 41 insertions(+), 26 deletions(-)
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
index 81fb8af408e9..f7e737e076bf 100644
--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -617,9 +617,9 @@ void zfcp_dbf_san_req(char *tag, struct zfcp_fsf_req *fsf, u32 d_id)
if (unlikely(!debug_level_enabled(dbf->san, ZFCP_DBF_SAN_LEVEL)))
return;
- length = (u16)zfcp_qdio_real_bytes(ct_els->req);
- zfcp_dbf_san(tag, dbf, "san_req", ct_els->req, ZFCP_DBF_SAN_REQ,
- length, fsf->req_id, d_id, length);
+ length = (u16)zfcp_qdio_real_bytes(ct_els->sgt_req.sgl);
+ zfcp_dbf_san(tag, dbf, "san_req", ct_els->sgt_req.sgl,
+ ZFCP_DBF_SAN_REQ, length, fsf->req_id, d_id, length);
}
static u16 zfcp_dbf_san_res_cap_len_if_gpn_ft(char *tag,
@@ -627,9 +627,9 @@ static u16 zfcp_dbf_san_res_cap_len_if_gpn_ft(char *tag,
u16 len)
{
struct zfcp_fsf_ct_els *ct_els = fsf->data;
- struct fc_ct_hdr *reqh = sg_virt(ct_els->req);
+ struct fc_ct_hdr *reqh = sg_virt(ct_els->sgt_req.sgl);
struct fc_ns_gid_ft *reqn = (struct fc_ns_gid_ft *)(reqh + 1);
- struct scatterlist *resp_entry = ct_els->resp;
+ struct scatterlist *resp_entry = ct_els->sgt_resp.sgl;
struct fc_ct_hdr *resph;
struct fc_gpn_ft_resp *acc;
int max_entries, x, last = 0;
@@ -698,9 +698,9 @@ void zfcp_dbf_san_res(char *tag, struct zfcp_fsf_req *fsf)
if (unlikely(!debug_level_enabled(dbf->san, ZFCP_DBF_SAN_LEVEL)))
return;
- length = (u16)zfcp_qdio_real_bytes(ct_els->resp);
- zfcp_dbf_san(tag, dbf, "san_res", ct_els->resp, ZFCP_DBF_SAN_RES,
- length, fsf->req_id, ct_els->d_id,
+ length = (u16)zfcp_qdio_real_bytes(ct_els->sgt_resp.sgl);
+ zfcp_dbf_san(tag, dbf, "san_res", ct_els->sgt_resp.sgl,
+ ZFCP_DBF_SAN_RES, length, fsf->req_id, ct_els->d_id,
zfcp_dbf_san_res_cap_len_if_gpn_ft(tag, fsf, length));
}
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c
index 05d081297879..1fb6f2c3b607 100644
--- a/drivers/s390/scsi/zfcp_fc.c
+++ b/drivers/s390/scsi/zfcp_fc.c
@@ -393,10 +393,12 @@ static int zfcp_fc_ns_gid_pn_request(struct zfcp_port *port,
fc_req->ct_els.port = port;
fc_req->ct_els.handler = zfcp_fc_complete;
fc_req->ct_els.handler_data = &completion;
- fc_req->ct_els.req = &fc_req->sg_req;
- fc_req->ct_els.resp = &fc_req->sg_rsp;
+ fc_req->ct_els.sgt_req.sgl = &fc_req->sg_req;
+ fc_req->ct_els.sgt_resp.sgl = &fc_req->sg_rsp;
sg_init_one(&fc_req->sg_req, gid_pn_req, sizeof(*gid_pn_req));
sg_init_one(&fc_req->sg_rsp, gid_pn_rsp, sizeof(*gid_pn_rsp));
+ fc_req->ct_els.sgt_req.orig_nents = sg_nents(&fc_req->sg_req);
+ fc_req->ct_els.sgt_resp.orig_nents = sg_nents(&fc_req->sg_rsp);
zfcp_fc_ct_ns_init(&gid_pn_req->ct_hdr,
FC_NS_GID_PN, ZFCP_FC_CT_SIZE_PAGE);
@@ -558,12 +560,14 @@ static int zfcp_fc_adisc(struct zfcp_port *port)
return -ENOMEM;
fc_req->ct_els.port = port;
- fc_req->ct_els.req = &fc_req->sg_req;
- fc_req->ct_els.resp = &fc_req->sg_rsp;
+ fc_req->ct_els.sgt_req.sgl = &fc_req->sg_req;
+ fc_req->ct_els.sgt_resp.sgl = &fc_req->sg_rsp;
sg_init_one(&fc_req->sg_req, &fc_req->u.adisc.req,
sizeof(struct fc_els_adisc));
sg_init_one(&fc_req->sg_rsp, &fc_req->u.adisc.rsp,
sizeof(struct fc_els_adisc));
+ fc_req->ct_els.sgt_req.orig_nents = sg_nents(&fc_req->sg_req);
+ fc_req->ct_els.sgt_resp.orig_nents = sg_nents(&fc_req->sg_rsp);
fc_req->ct_els.handler = zfcp_fc_adisc_handler;
fc_req->ct_els.handler_data = fc_req;
@@ -706,8 +710,10 @@ static int zfcp_fc_send_gpn_ft(struct zfcp_fc_req *fc_req,
ct_els->handler = zfcp_fc_complete;
ct_els->handler_data = &completion;
- ct_els->req = &fc_req->sg_req;
- ct_els->resp = &fc_req->sg_rsp;
+ ct_els->sgt_req.sgl = &fc_req->sg_req;
+ ct_els->sgt_resp.sgl = &fc_req->sg_rsp;
+ ct_els->sgt_req.orig_nents = sg_nents(&fc_req->sg_req);
+ ct_els->sgt_resp.orig_nents = sg_nents(&fc_req->sg_rsp);
ret = zfcp_fsf_send_ct(&adapter->gs->ds, ct_els, NULL,
ZFCP_FC_CTELS_TMO);
@@ -865,8 +871,10 @@ static int zfcp_fc_gspn(struct zfcp_adapter *adapter,
ct_els->handler = zfcp_fc_complete;
ct_els->handler_data = &completion;
- ct_els->req = &fc_req->sg_req;
- ct_els->resp = &fc_req->sg_rsp;
+ ct_els->sgt_req.sgl = &fc_req->sg_req;
+ ct_els->sgt_resp.sgl = &fc_req->sg_rsp;
+ ct_els->sgt_req.orig_nents = sg_nents(&fc_req->sg_req);
+ ct_els->sgt_resp.orig_nents = sg_nents(&fc_req->sg_rsp);
ret = zfcp_fsf_send_ct(&adapter->gs->ds, ct_els, NULL,
ZFCP_FC_CTELS_TMO);
@@ -924,8 +932,10 @@ static void zfcp_fc_rspn(struct zfcp_adapter *adapter,
ct_els->handler = zfcp_fc_complete;
ct_els->handler_data = &completion;
- ct_els->req = &fc_req->sg_req;
- ct_els->resp = &fc_req->sg_rsp;
+ ct_els->sgt_req.sgl = &fc_req->sg_req;
+ ct_els->sgt_resp.sgl = &fc_req->sg_rsp;
+ ct_els->sgt_req.orig_nents = sg_nents(&fc_req->sg_req);
+ ct_els->sgt_resp.orig_nents = sg_nents(&fc_req->sg_rsp);
ret = zfcp_fsf_send_ct(&adapter->gs->ds, ct_els, NULL,
ZFCP_FC_CTELS_TMO);
@@ -1090,8 +1100,10 @@ int zfcp_fc_exec_bsg_job(struct bsg_job *job)
if (!(atomic_read(&adapter->status) & ZFCP_STATUS_COMMON_OPEN))
return -EINVAL;
- ct_els->req = job->request_payload.sg_list;
- ct_els->resp = job->reply_payload.sg_list;
+ ct_els->sgt_req.sgl = job->request_payload.sg_list;
+ ct_els->sgt_resp.sgl = job->reply_payload.sg_list;
+ ct_els->sgt_req.orig_nents = sg_nents(ct_els->sgt_req.sgl);
+ ct_els->sgt_resp.orig_nents = sg_nents(ct_els->sgt_resp.sgl);
ct_els->handler_data = job;
switch (bsg_request->msgcode) {
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index d407f16e77ef..a3b99839da9e 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -1242,7 +1242,8 @@ int zfcp_fsf_send_ct(struct zfcp_fc_wka_port *wka_port,
}
req->status |= ZFCP_STATUS_FSFREQ_CLEANUP;
- ret = zfcp_fsf_setup_ct_els(req, ct->req, ct->resp, timeout);
+ ret = zfcp_fsf_setup_ct_els(req, ct->sgt_req.sgl, ct->sgt_resp.sgl,
+ timeout);
if (ret)
goto failed_send;
@@ -1342,7 +1343,8 @@ int zfcp_fsf_send_els(struct zfcp_adapter *adapter, u32 d_id,
if (!zfcp_adapter_multi_buffer_active(adapter))
zfcp_qdio_sbal_limit(qdio, &req->qdio_req, 2);
- ret = zfcp_fsf_setup_ct_els(req, els->req, els->resp, timeout);
+ ret = zfcp_fsf_setup_ct_els(req, els->sgt_req.sgl, els->sgt_resp.sgl,
+ timeout);
if (ret)
goto failed_send;
diff --git a/drivers/s390/scsi/zfcp_fsf.h b/drivers/s390/scsi/zfcp_fsf.h
index 4b92e85ec71d..22e7fd933a78 100644
--- a/drivers/s390/scsi/zfcp_fsf.h
+++ b/drivers/s390/scsi/zfcp_fsf.h
@@ -487,8 +487,9 @@ struct zfcp_blk_drv_data {
/**
* struct zfcp_fsf_ct_els - zfcp data for ct or els request
- * @req: scatter-gather list for request, points to &zfcp_fc_req.sg_req or BSG
- * @resp: scatter-gather list for response, points to &zfcp_fc_req.sg_rsp or BSG
+ * @sgt_req: sg_table for request, its sgl points to &zfcp_fc_req.sg_req or BSG
+ * @sgt_resp: sg_table for response, its sgl points to &zfcp_fc_req.sg_resp
+ * or BSG
* @handler: handler function (called for response to the request)
* @handler_data: data passed to handler function
* @port: Optional pointer to port for zfcp internal ELS (only test link ADISC)
@@ -496,8 +497,8 @@ struct zfcp_blk_drv_data {
* @d_id: Destination ID of either open WKA port for CT or of D_ID for ELS
*/
struct zfcp_fsf_ct_els {
- struct scatterlist *req;
- struct scatterlist *resp;
+ struct sg_table sgt_req;
+ struct sg_table sgt_resp;
void (*handler)(void *);
void *handler_data;
struct zfcp_port *port;
--
2.53.0
next prev parent reply other threads:[~2026-09-24 6:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-24 6:09 [PATCH v12 0/2] zfcp: Use DMA streaming API to map I/O M Nikhil
2026-09-24 6:09 ` M Nikhil [this message]
2026-09-24 6:19 ` [PATCH v12 1/2] zfcp: Replace sg-list with sg_table in zfcp_fsf_ct_els structure sashiko-bot
2026-09-24 6:09 ` [PATCH v12 2/2] zfcp: Use DMA streaming API to map I/O M Nikhil
2026-09-24 6:35 ` sashiko-bot
-- strict thread matches above, loose matches on Subject: below --
2026-09-21 14:30 [PATCH v12 0/2] " M Nikhil
2026-09-21 14:30 ` [PATCH v12 1/2] zfcp: Replace sg-list with sg_table in zfcp_fsf_ct_els structure M Nikhil
2026-09-11 8:40 M Nikhil
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=20260924060923.3076902-2-nikh1092@linux.ibm.com \
--to=nikh1092@linux.ibm.com \
--cc=linux-s390@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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