Thread

Commits

  1. Fix shared memory calculation size of PgAioCtl

  1. AioCtl Shared Memory size fix

    Madhukar . <madhukarprasad@google.com> — 2025-09-15T09:31:07Z

    Hi Folks,
    
    While reviewing AIO code, we found an issue with AioCtlShmemSize function.
    The function was not accounting for io_handles which is used post shared
    memory alloc in AioShmemInit. Please find a patch to account for
    io_handles member of PgAioCtl.
    
    The patch uses sizeof(PgAioCtl) instead of offsetof(PgAioCtl, io_handles)
    in AioCtlShmemSize.
    
    Thanks,
    Madhukar
    
  2. Re: AioCtl Shared Memory size fix

    Matthias van de Meent <boekewurm+postgres@gmail.com> — 2025-09-15T12:06:03Z

    On Mon, 15 Sept 2025 at 13:33, Madhukar . <madhukarprasad@google.com> wrote:
    >
    > Hi Folks,
    >
    > While reviewing AIO code, we found an issue with AioCtlShmemSize function. The function was not accounting for io_handles which is used post shared memory alloc in AioShmemInit.
    
    Good catch.
    
    Presumably this was `PgAioHandle io_handles[]` at some point, but now
    that it's a pointer it's a proper part of the struct's own size, and
    should be treated as such for memory accounting.
    
    > Please find a patch to account for io_handles member of PgAioCtl.
    > The patch uses sizeof(PgAioCtl) instead of offsetof(PgAioCtl, io_handles) in AioCtlShmemSize.
    
    LGTM.
    
    
    Kind regards,
    
    Matthias van de Meent
    Databricks
    
    
    
    
  3. Re: AioCtl Shared Memory size fix

    Michael Paquier <michael@paquier.xyz> — 2025-09-16T06:50:20Z

    On Mon, Sep 15, 2025 at 02:06:03PM +0200, Matthias van de Meent wrote:
    > Presumably this was `PgAioHandle io_handles[]` at some point, but now
    > that it's a pointer it's a proper part of the struct's own size, and
    > should be treated as such for memory accounting.
    
    I would bet on a FLEXIBLE_ARRAY_MEMBER from a previous version..
    
    >> Please find a patch to account for io_handles member of PgAioCtl.
    >> The patch uses sizeof(PgAioCtl) instead of offsetof(PgAioCtl, io_handles) in AioCtlShmemSize.
    > 
    > LGTM.
    
    Yep, will fix.  Thanks for the report, the patch and the review, to
    both of you.
    --
    Michael
    
  4. Re: AioCtl Shared Memory size fix

    Andres Freund <andres@anarazel.de> — 2025-09-16T23:32:02Z

    Hi,
    
    On 2025-09-16 15:50:20 +0900, Michael Paquier wrote:
    > On Mon, Sep 15, 2025 at 02:06:03PM +0200, Matthias van de Meent wrote:
    > > Presumably this was `PgAioHandle io_handles[]` at some point, but now
    > > that it's a pointer it's a proper part of the struct's own size, and
    > > should be treated as such for memory accounting.
    > 
    > I would bet on a FLEXIBLE_ARRAY_MEMBER from a previous version..
    
    Indeed. I don't remember for sure why I changed it, but I think it may have
    been to make the different allocations more visible in pg_shmem_allocations.
    
    
    > >> Please find a patch to account for io_handles member of PgAioCtl.
    > >> The patch uses sizeof(PgAioCtl) instead of offsetof(PgAioCtl, io_handles) in AioCtlShmemSize.
    > > 
    > > LGTM.
    > 
    > Yep, will fix.  Thanks for the report, the patch and the review, to
    > both of you.
    
    Thanks for finding and fixing!
    
    Greetings,
    
    Andres Freund