Re: Build warning with meson and dtrace on Fedora 43

From: Andrey Rachitskiy <pl0h0yp1(at)gmail(dot)com>
To: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
Cc: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Build warning with meson and dtrace on Fedora 43
Date: 2026-07-24 07:38:04
Message-ID: CAB8bMisseciDh6NJcBR-W4X4v_DvmauO8rYwSQJpWDAb84+5sg@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Черновик ответа Alvaro:

Álvaro Herrera <alvherre(at)kurilemu(dot)de> writes:
> That's weird. The only change that seems near enough in that commit was
> ... nbytes from int to ssize_t in md.c ...
>
> But then, variable 'nbytes' is not used by the probe mentioned in the
> error message.

The confusing part is the warning text itself.
SystemTap's dtrace(1) fails while parsing the *next* probe and
reports the name of the last probe it successfully parsed.
So "syntax error near: probe smgr__md__read__start" really means it
choked on smgr__md__read__done just below.
ca326e903d also changed probes.d in the same commit:
```
- probe smgr__md__read__done(..., int, int, int);
+ probe smgr__md__read__done(..., int, long long int, long long int);
```
(and 1f8c504e308 did the same for smgr__md__write__done). That is
what triggers the warning. The md.c ssize_t change is unrelated to
probes.h generation; reverting nbytes to int would not silence it.

I checked this on Fedora 43 with systemtap-sdt-devel 5.5:
- long long int, long long int -> warning
- int, int -> clean
- ssize_t, long long int -> warning (still has long long int)
- long, long -> clean

So using ssize_t for only the first of those two arguments is not
enough. ssize_t, ssize_t would satisfy SystemTap's parser, but
probes.d already documents that we should not use system typedefs
there (they break on macOS). "long" matches ssize_t on the LP64
platforms where we support DTrace, and is already used by
sort__done.
The patch I sent earlier switches both trailing arguments of
smgr__md__{read,write}__done to long (and updates the docs).

---
Regards,
Rachitskiy Andrey

пт, 24 июл. 2026 г. в 11:43, Álvaro Herrera <alvherre(at)kurilemu(dot)de>:

> On 2026-Jul-24, Laurenz Albe wrote:
>
> > When I build with meson/ninja with pretty much everything enabled
> > and dtrace, I get the following warning:
> >
> > [40/2412] Generating src/include/utils/probes.h.tmp with a custom
> command
> > Warning: /usr/bin/dtrace:.dtrace-temp.cf7b554c.d:68: syntax error near:
> > probe smgr__md__read__start
> >
> > Warning: Proceeding as if --no-pyparsing was given.
> >
> > I don't get the warning when I build with configure/make.
> >
> > "git bisect" identifies the following commit as culprit:
> >
> > ca326e903d "Clean up read() return type" by Peter E.
> >
> > I don't know enough about dtrace to track this down, but I think it
> > should be fixed.
>
> That's weird. The only change that seems near enough in that commit was
>
> diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
> index 718c1cfc0f9..79febf12de3 100644
> --- a/src/backend/storage/smgr/md.c
> +++ b/src/backend/storage/smgr/md.c
> @@ -863,7 +863,7 @@ mdreadv(SMgrRelation reln, ForkNumber forknum,
> BlockNumber blocknum,
> struct iovec iov[PG_IOV_MAX];
> int iovcnt;
> pgoff_t seekpos;
> - int nbytes;
> + ssize_t nbytes;
> MdfdVec *v;
> BlockNumber nblocks_this_segment;
> size_t transferred_this_segment;
>
>
> But then, variable 'nbytes' is not used by the probe mentioned in the
> error message. It is used by the probe two lines below:
>
> src/backend/storage/smgr/md.c:
> TRACE_POSTGRESQL_SMGR_MD_READ_START(forknum, blocknum,
>
> reln->smgr_rlocator.locator.spcOid,
>
> reln->smgr_rlocator.locator.dbOid,
>
> reln->smgr_rlocator.locator.relNumber,
>
> reln->smgr_rlocator.backend);
> nbytes = FileReadV(v->mdfd_vfd, iov, iovcnt, seekpos,
> WAIT_EVENT_DATA_FILE_READ);
> TRACE_POSTGRESQL_SMGR_MD_READ_DONE(forknum, blocknum,
>
> reln->smgr_rlocator.locator.spcOid,
>
> reln->smgr_rlocator.locator.dbOid,
>
> reln->smgr_rlocator.locator.relNumber,
> reln->smgr_rlocator.backend,
> nbytes,
> size_this_segment -
> transferred_this_segment);
>
> I wonder if changing the first 'long long int' to ssize_t in
> src/backend/utils/probes.d for smgr__md__read__done would fix it:
>
>
> probe smgr__md__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid,
> int);
> - probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid,
> int, long long int, long long int);
> + probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid,
> int, ssize_t, long long int);
>
>
> (Making that one nbytes back to int from ssize_t in md.c and seeing if
> that silences the warning would also be a way to be more certain that
> this is the code that the warning is about.)
>
> --
> Álvaro Herrera Breisgau, Deutschland —
> https://www.EnterpriseDB.com/
>
>
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Ian Lawrence Barwick 2026-07-24 07:45:38 Re: Collect ALTER PUBLICATION commands for event triggers
Previous Message Jakub Wartak 2026-07-24 07:31:43 Re: [WIP] Pipelined Recovery