Thread: win32 inode fix

win32 inode fix

From
Claudio Natoli
Date:
For community review and application to HEAD; minor patch.

Under Win32, stat() returns an st_ino field, but it has no meaning (on
Win2K, and possibly all Win32 variants, it is always 0). This causes a
number of problems in the dfmgr.c logic, which basically all revolve around
the fact that *any* two files will appear to have the same inode.

Note also that this solves the current issues related to initdb under Win32.


---
Certain disclaimers and policies apply to all email sent from Memetrics.
For the full text of these disclaimers and policies see
<a
href="http://www.memetrics.com/emailpolicy.html">http://www.memetrics.com/em
ailpolicy.html</a>



Attachment

Re: win32 inode fix

From
Neil Conway
Date:
Claudio Natoli <claudio.natoli@memetrics.com> writes:
> Under Win32, stat() returns an st_ino field, but it has no meaning (on
> Win2K, and possibly all Win32 variants, it is always 0).

MSDN says:

    Number of the information node (the inode) for the file
    (UNIX-specific). On UNIX file systems, the inode describes the
    file date and time stamps, permissions, and content. When files
    are hard-linked to one another, they share the same inode. The
    inode, and therefore st_ino, has no meaning in the FAT, HPFS, or
    NTFS file systems.

I wonder if this might return non-zero for some relatively rare Win32
filesystems (say, an NFS share mounted via MS Services For
Unix). Perhaps it might be cleaner to consider a zero inode "unknown",
and therefore not equal to anything else?

-Neil (who knows next to nothing about Win32, so take that with a
grain of salt)


Re: win32 inode fix

From
"Magnus Hagander"
Date:
> Claudio Natoli <claudio.natoli@memetrics.com> writes:
> > Under Win32, stat() returns an st_ino field, but it has no
> meaning (on
> > Win2K, and possibly all Win32 variants, it is always 0).
>
> MSDN says:
>
>     Number of the information node (the inode) for the file
>     (UNIX-specific). On UNIX file systems, the inode describes the
>     file date and time stamps, permissions, and content. When files
>     are hard-linked to one another, they share the same inode. The
>     inode, and therefore st_ino, has no meaning in the FAT, HPFS, or
>     NTFS file systems.
>
> I wonder if this might return non-zero for some relatively
> rare Win32 filesystems (say, an NFS share mounted via MS
> Services For Unix). Perhaps it might be cleaner to consider a
> zero inode "unknown", and therefore not equal to anything else?

It still returns 0 on a NFS share mounted with SFU (just tested). My bet
is that it will always return 0.

Might still be cleaner to change the code to make "zero equals unknown".
Is there a risk of another filesystem om some platform that won't return
inode?

//mha

Re: win32 inode fix

From
Bruce Momjian
Date:
Magnus Hagander wrote:
> > Claudio Natoli <claudio.natoli@memetrics.com> writes:
> > > Under Win32, stat() returns an st_ino field, but it has no
> > meaning (on
> > > Win2K, and possibly all Win32 variants, it is always 0).
> >
> > MSDN says:
> >
> >     Number of the information node (the inode) for the file
> >     (UNIX-specific). On UNIX file systems, the inode describes the
> >     file date and time stamps, permissions, and content. When files
> >     are hard-linked to one another, they share the same inode. The
> >     inode, and therefore st_ino, has no meaning in the FAT, HPFS, or
> >     NTFS file systems.
> >
> > I wonder if this might return non-zero for some relatively
> > rare Win32 filesystems (say, an NFS share mounted via MS
> > Services For Unix). Perhaps it might be cleaner to consider a
> > zero inode "unknown", and therefore not equal to anything else?
>
> It still returns 0 on a NFS share mounted with SFU (just tested). My bet
> is that it will always return 0.
>
> Might still be cleaner to change the code to make "zero equals unknown".
> Is there a risk of another filesystem om some platform that won't return
> inode?

In reading the patch, it seems he is only doing "zero equals unknown" on
Win32, so I think we are fine.  We should continue using the inode on
Unix platforms.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: win32 inode fix

From
Neil Conway
Date:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> In reading the patch, it seems he is only doing "zero equals
> unknown" on Win32, so I think we are fine.

That's what I was trying to avoid: where possible, we shouldn't
introduce platform-dependent #ifdefs IMHO.

-Neil


Re: win32 inode fix

From
Bruce Momjian
Date:
Neil Conway wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > In reading the patch, it seems he is only doing "zero equals
> > unknown" on Win32, so I think we are fine.
>
> That's what I was trying to avoid: where possible, we shouldn't
> introduce platform-dependent #ifdefs IMHO.

But the platform doesn't give us what we want so I don't see why we
should weaken other platforms just for consistency.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: win32 inode fix

From
Andrew Dunstan
Date:

Bruce Momjian wrote:

>Neil Conway wrote:
>
>
>>Bruce Momjian <pgman@candle.pha.pa.us> writes:
>>
>>
>>>In reading the patch, it seems he is only doing "zero equals
>>>unknown" on Win32, so I think we are fine.
>>>
>>>
>>That's what I was trying to avoid: where possible, we shouldn't
>>introduce platform-dependent #ifdefs IMHO.
>>
>>
>
>But the platform doesn't give us what we want so I don't see why we
>should weaken other platforms just for consistency.
>
>

Surely the operative words are "where possible". Looks like this is one
case where it is not reasonably possible. I don't think we will ever be
totally rid of them. I tried quite hard to keep them to a minimum in
initdb, but eliminating them was not really an option.

cheers

andrew


Re: win32 inode fix

From
Bruce Momjian
Date:
Patch applied.  Thanks.

---------------------------------------------------------------------------


Claudio Natoli wrote:
>
> For community review and application to HEAD; minor patch.
>
> Under Win32, stat() returns an st_ino field, but it has no meaning (on
> Win2K, and possibly all Win32 variants, it is always 0). This causes a
> number of problems in the dfmgr.c logic, which basically all revolve around
> the fact that *any* two files will appear to have the same inode.
>
> Note also that this solves the current issues related to initdb under Win32.
>
>
> ---
> Certain disclaimers and policies apply to all email sent from Memetrics.
> For the full text of these disclaimers and policies see
> <a
> href="http://www.memetrics.com/emailpolicy.html">http://www.memetrics.com/em
> ailpolicy.html</a>
>
>

[ Attachment, skipping... ]

>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073