On Tue, Jun 30, 2026 at 12:28 AM Damien Le Moal <[email protected]> wrote:
>
> On 6/30/26 10:21, Rosen Penev wrote:
> > Signed-off-by: Rosen Penev <[email protected]>
>
> No commit message ? Please explain your reasonning, because I find this patch
> incorrect. See below.
>
> > ---
> >  drivers/scsi/st.c | 12 +++---------
> >  drivers/scsi/st.h |  3 ++-
> >  2 files changed, 5 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
> > index f1c3c4946637..31ae189b18e7 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);
>
> reserve_pages is in the middle of struct st_buffer so you cannot use a flex 
> array.
This patch moves it, no?
>
> > -     if (!tb->reserved_pages) {
> > -             kfree(tb);
> > -             return NULL;
> > -     }
> > -
> >       return tb;
> >  }
> >
> > 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 */
>
>
> --
> Damien Le Moal
> Western Digital Research

Reply via email to