From: Rosen Penev <rosenp@gmail.com>
To: linux-scsi@vger.kernel.org
Cc: "Kai Mäkisara" <Kai.Makisara@kolumbus.fi>,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
"Kees Cook" <kees@kernel.org>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
linux-kernel@vger.kernel.org (open list),
linux-hardening@vger.kernel.org (open list:KERNEL HARDENING (not
covered by other areas):Keyword:b__counted_by(_le|_be|_ptr)?b)
Subject: [PATCHv3] scsi: st: use kzalloc_array()
Date: Mon, 6 Jul 2026 16:30:29 -0700 [thread overview]
Message-ID: <20260706233029.814601-1-rosenp@gmail.com> (raw)
Merge allocations to simplify memory management with kzalloc_array(). No
need to kfree separately.
Add __counted_by for extra runtime analysis. Move counting variable
assignment after allocation as kzalloc_flex() does this with newer
compilers.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v3: typo fix
v2: remove the kfree and add a description.
drivers/scsi/st.c | 13 +++----------
drivers/scsi/st.h | 3 ++-
2 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index f1c3c4946637..55238f23f743 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -149,7 +149,7 @@ static struct st_dev_parm {
mode counts */
static const char *st_formats[] = {
"", "r", "k", "s", "l", "t", "o", "u",
- "m", "v", "p", "x", "a", "y", "q", "z"};
+ "m", "v", "p", "x", "a", "y", "q", "z"};
/* The default definitions have been moved to st_options.h */
@@ -3973,21 +3973,15 @@ static struct st_buffer *new_tape_buffer(int max_sg)
{
struct st_buffer *tb;
- tb = kzalloc_obj(struct st_buffer);
+ tb = kzalloc_flex(*tb, reserved_pages, max_sg);
if (!tb) {
printk(KERN_NOTICE "st: Can't allocate new tape buffer.\n");
return NULL;
}
- tb->frp_segs = 0;
tb->use_sg = max_sg;
+ tb->frp_segs = 0;
tb->buffer_size = 0;
- tb->reserved_pages = kzalloc_objs(struct page *, max_sg);
- if (!tb->reserved_pages) {
- kfree(tb);
- return NULL;
- }
-
return tb;
}
@@ -4533,7 +4527,6 @@ static void scsi_tape_release(struct kref *kref)
if (tpnt->buffer) {
normalize_buffer(tpnt->buffer);
- kfree(tpnt->buffer->reserved_pages);
kfree(tpnt->buffer);
}
diff --git a/drivers/scsi/st.h b/drivers/scsi/st.h
index 0d7c4b8c2c8a..759f4c43d563 100644
--- a/drivers/scsi/st.h
+++ b/drivers/scsi/st.h
@@ -45,7 +45,6 @@ struct st_buffer {
int syscall_result;
struct st_request *last_SRpnt;
struct st_cmdstatus cmdstat;
- struct page **reserved_pages;
int reserved_page_order;
struct page **mapped_pages;
struct rq_map_data map_data;
@@ -53,6 +52,8 @@ struct st_buffer {
unsigned short use_sg; /* zero or max number of s/g segments for this adapter */
unsigned short sg_segs; /* number of segments in s/g list */
unsigned short frp_segs; /* number of buffer segments */
+
+ struct page *reserved_pages[] __counted_by(use_sg);
};
/* The tape mode definition */
--
2.55.0
next reply other threads:[~2026-07-06 23:30 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 23:30 Rosen Penev [this message]
2026-07-07 1:23 ` [PATCHv3] scsi: st: use kzalloc_array() Damien Le Moal
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=20260706233029.814601-1-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=Kai.Makisara@kolumbus.fi \
--cc=gustavoars@kernel.org \
--cc=kees@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.