Re: A micro-optimisation for walkdir()

Thomas Munro <thomas.munro@gmail.com>

From: Thomas Munro <thomas.munro@gmail.com>
To: Magnus Hagander <magnus@hagander.net>
Cc: Juan José Santamaría Flecha <juanjo.santamaria@gmail.com>, Andres Freund <andres@anarazel.de>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-09-07T11:40:47Z
Lists: pgsql-hackers
On Mon, Sep 7, 2020 at 9:42 PM Magnus Hagander <magnus@hagander.net> wrote:
> On Mon, Sep 7, 2020 at 12:27 AM Thomas Munro <thomas.munro@gmail.com> wrote:
>> I think the following is a little mysterious, but it does seem to be
>> what people do for this in other projects.  It is the documented way
>> to detect mount points, and I guess IO_REPARSE_TAG_MOUNT_POINT is
>> either overloaded also for junctions, or junctions are the same thing
>> as mount points.  It would be nice to see a Win32 documentation page
>> that explicitly said that.
>
> The wikipedia page on it is actually fairly decent: https://en.wikipedia.org/wiki/NTFS_reparse_point. It's not the documentation of course, but it's easier to read :) The core difference is whether you mount a whole filesystem (mount point) or just a directory off something mounted elsehwere (junction).
>
> And yes, the wikipedia page confirms that junctions also use IO_REPARSE_TAG_MOUNT_POINT.

Thanks for confirming.  I ran the Windows patch through pgindent,
fixed a small typo, and pushed.



Commits

  1. Add d_type to our Windows dirent emulation.

  2. Skip unnecessary stat() calls in walkdir().