Re: x86_64: 32bit emulation problems

Andi Kleen
2005-03-03T09:14:28Z

On Wed, Mar 02, 2005 at 01:13:38AM -0800, Trond Myklebust wrote:
> on den 02.03.2005 Klokka 09:18 (+0100) skreiv Andi Kleen:
> > On Wed, Mar 02, 2005 at 12:46:23AM +0100, Andreas Schwab wrote:
> > > Bernd Schubert <bernd-schubert@web.de> writes:
> > >
> > > > Hmm, after compiling with -D_FILE_OFFSET_BITS=64 it works fine. But why does
> > > > it work without this option on a 32bit kernel, but not on a 64bit kernel?
> > >
> > > See nfs_fileid_to_ino_t for why the inode number is different between
> > > 32bit and 64bit kernels.
> >
> > Ok that explains it. Thanks.
> >
> > Best would be probably to just do the shift unconditionally on 64bit kernels
> > too.
> >
> > Trond, what do you think?
>
> Why would this be more appropriate than defining __kernel_ino_t on the
> x86_64 platform to be of the size that you actually want the kernel to
> support?
> I can see no good reason for truncating inode number values on platforms
> that actually do support 64-bit inode numbers, but I can see several

If you include 32bit emulation x86-64 doesn't support them.
I guess you could make it dependent on CONFIG_COMPAT, but I expect
near all people running an x86-64 to have it set.

> reasons why you might want not to (utilities that need to detect hard
> linked files for instance).

32bit compatibility is a good reason. 32bit compatibility
is fairly important

Afaik the only "pure" 64bit architecture without 32bit emulation
is Alpha. In theory you could enable it unconditionally there,
but I'm not sure it's worth it.

-Andi